/*
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for license information.
 *
 * Code generated by Microsoft (R) AutoRest Code Generator.
 * Changes may cause incorrect behavior and will be lost if the code is regenerated.
 */

import { BaseResource, CloudError } from "ms-rest-azure";
import * as moment from "moment";

export {

  BaseResource,
  CloudError
};

/**
 * The result of the request or operation.
 */
export interface FileOperationResult {
  /**
   * the result of the operation or request.
   */
  readonly operationResult?: boolean;
}

/**
 * Data Lake Store file or directory Access Control List information.
 */
export interface AclStatus {
  /**
   * the list of ACLSpec entries on a file or directory.
   */
  entries?: string[];
  /**
   * the group owner, an AAD Object ID.
   */
  group?: string;
  /**
   * the user owner, an AAD Object ID.
   */
  owner?: string;
  /**
   * The octal representation of the unnamed user, mask and other permissions.
   */
  permission?: string;
  /**
   * the indicator of whether the sticky bit is on or off.
   */
  readonly stickyBit?: boolean;
}

/**
 * Data Lake Store file or directory Access Control List information.
 */
export interface AclStatusResult {
  /**
   * the AclStatus object for a given file or directory.
   */
  aclStatus?: AclStatus;
}

/**
 * Data Lake Store content summary information
 */
export interface ContentSummary {
  /**
   * the number of directories.
   */
  readonly directoryCount?: number;
  /**
   * the number of files.
   */
  readonly fileCount?: number;
  /**
   * the number of bytes used by the content.
   */
  readonly length?: number;
  /**
   * the disk space consumed by the content.
   */
  readonly spaceConsumed?: number;
}

/**
 * Data Lake Store filesystem content summary information response.
 */
export interface ContentSummaryResult {
  /**
   * the content summary for the specified path
   */
  readonly contentSummary?: ContentSummary;
}

/**
 * Data Lake Store file or directory information.
 */
export interface FileStatusProperties {
  /**
   * the last access time as ticks since the epoch.
   */
  readonly accessTime?: number;
  /**
   * the block size for the file.
   */
  readonly blockSize?: number;
  /**
   * Gets the expiration time, if any, as ticks since the epoch. If the value is 0 or
   * DateTime.MaxValue there is no expiration.
   */
  readonly expirationTime?: number;
  /**
   * the group owner.
   */
  readonly group?: string;
  /**
   * the number of bytes in a file.
   */
  readonly length?: number;
  /**
   * the modification time as ticks since the epoch.
   */
  readonly modificationTime?: number;
  /**
   * the user who is the owner.
   */
  readonly owner?: string;
  /**
   * the path suffix.
   */
  readonly pathSuffix?: string;
  /**
   * the permission represented as an string.
   */
  readonly permission?: string;
  /**
   * the type of the path object. Possible values include: 'FILE', 'DIRECTORY'
   */
  readonly type?: string;
  /**
   * flag to indicate if extended acls are enabled
   */
  readonly aclBit?: boolean;
}

/**
 * Data Lake Store file status list information.
 */
export interface FileStatuses {
  /**
   * the object containing the list of properties of the files.
   */
  readonly fileStatus?: FileStatusProperties[];
}

/**
 * Data Lake Store filesystem file status list information response.
 */
export interface FileStatusesResult {
  /**
   * the object representing the list of file statuses.
   */
  readonly fileStatuses?: FileStatuses;
}

/**
 * Data Lake Store filesystem file status information response.
 */
export interface FileStatusResult {
  /**
   * the file status object associated with the specified path.
   */
  readonly fileStatus?: FileStatusProperties;
}

/**
 * Data Lake Store filesystem exception based on the WebHDFS definition for RemoteExceptions. This
 * is a WebHDFS 'catch all' exception
 */
export interface AdlsRemoteException {
  /**
   * the full class package name for the exception thrown, such as
   * 'java.lang.IllegalArgumentException'.
   */
  readonly javaClassName?: string;
  /**
   * the message associated with the exception that was thrown, such as 'Invalid value for webhdfs
   * parameter "permission":...'.
   */
  readonly message?: string;
  /**
   * Polymorphic Discriminator
   */
  exception: string;
}

/**
 * A WebHDFS exception thrown indicating that one more arguments is incorrect. Thrown when a 400
 * error response code is returned (bad request).
 */
export interface AdlsIllegalArgumentException extends AdlsRemoteException {
}

/**
 * A WebHDFS exception thrown indicating that the requested operation is not supported. Thrown when
 * a 400 error response code is returned (bad request).
 */
export interface AdlsUnsupportedOperationException extends AdlsRemoteException {
}

/**
 * A WebHDFS exception thrown indicating that access is denied. Thrown when a 401 error response
 * code is returned (Unauthorized).
 */
export interface AdlsSecurityException extends AdlsRemoteException {
}

/**
 * A WebHDFS exception thrown indicating there was an IO (read or write) error. Thrown when a 403
 * error response code is returned (forbidden).
 */
export interface AdlsIOException extends AdlsRemoteException {
}

/**
 * A WebHDFS exception thrown indicating the file or folder could not be found. Thrown when a 404
 * error response code is returned (not found).
 */
export interface AdlsFileNotFoundException extends AdlsRemoteException {
}

/**
 * A WebHDFS exception thrown indicating the file or folder already exists. Thrown when a 403 error
 * response code is returned (forbidden).
 */
export interface AdlsFileAlreadyExistsException extends AdlsRemoteException {
}

/**
 * A WebHDFS exception thrown indicating the append or read is from a bad offset. Thrown when a 400
 * error response code is returned for append and open operations (Bad request).
 */
export interface AdlsBadOffsetException extends AdlsRemoteException {
}

/**
 * A WebHDFS exception thrown when an unexpected error occurs during an operation. Thrown when a
 * 500 error response code is returned (Internal server error).
 */
export interface AdlsRuntimeException extends AdlsRemoteException {
}

/**
 * A WebHDFS exception thrown indicating that access is denied due to insufficient permissions.
 * Thrown when a 403 error response code is returned (forbidden).
 */
export interface AdlsAccessControlException extends AdlsRemoteException {
}

/**
 * A WebHDFS exception thrown indicating that the request is being throttled. Reducing the number
 * of requests or request size helps to mitigate this error.
 */
export interface AdlsThrottledException extends AdlsRemoteException {
}

/**
 * Data Lake Store filesystem error containing a specific WebHDFS exception.
 */
export interface AdlsError {
  /**
   * the object representing the actual WebHDFS exception being returned.
   */
  readonly remoteException?: AdlsRemoteException;
}
