/*
 * Copyright (c) Microsoft Corporation.
 * Licensed under the MIT License.
 *
 * Code generated by Microsoft (R) AutoRest Code Generator.
 * Changes may cause incorrect behavior and will be lost if the code is regenerated.
 */

import { DistributionGroups } from "../operationsInterfaces";
import * as coreClient from "@azure/core-client";
import * as Mappers from "../models/mappers";
import * as Parameters from "../models/parameters";
import { AppCenterClient } from "../appCenterClient";
import {
  DistributionGroupsListAllTestersForOrgOptionalParams,
  DistributionGroupsListAllTestersForOrgResponse,
  DistributionGroupsDetailsForOrgOptionalParams,
  DistributionGroupsDetailsForOrgResponse,
  DistributionGroupsResendSharedInviteOptionalParams,
  DistributionGroupsBulkDeleteUsersOptionalParams,
  DistributionGroupsListUsersForOrgOptionalParams,
  DistributionGroupsListUsersForOrgResponse,
  DistributionGroupsAddUsersForOrgOptionalParams,
  DistributionGroupsAddUsersForOrgResponse,
  DistributionGroupsBulkDeleteAppsOptionalParams,
  DistributionGroupsGetAppsOptionalParams,
  DistributionGroupsGetAppsResponse,
  DistributionGroupsAddAppsOptionalParams,
  DistributionGroupsGetForOrgOptionalParams,
  DistributionGroupsGetForOrgResponse,
  DistributionGroupsPatchForOrgOptionalParams,
  DistributionGroupsPatchForOrgResponse,
  DistributionGroupsDeleteForOrgOptionalParams,
  DistributionGroupsCreateForOrgOptionalParams,
  DistributionGroupsCreateForOrgResponse,
  DistributionGroupsListForOrgOptionalParams,
  DistributionGroupsListForOrgResponse,
  DistributionGroupsResendInviteOptionalParams,
  DistributionGroupsRemoveUserOptionalParams,
  DistributionGroupsRemoveUserResponse,
  DistributionGroupsListUsersOptionalParams,
  DistributionGroupsListUsersResponse,
  DistributionGroupsAddUserOptionalParams,
  DistributionGroupsAddUserResponse,
  DistributionGroupsGetOptionalParams,
  DistributionGroupsGetResponse,
  DistributionGroupsUpdateOptionalParams,
  DistributionGroupsUpdateResponse,
  DistributionGroupsDeleteOptionalParams,
  DistributionGroupsListOptionalParams,
  DistributionGroupsListResponse,
  DistributionGroupsCreateOptionalParams,
  DistributionGroupsCreateResponse
} from "../models";

/** Class containing DistributionGroups operations. */
export class DistributionGroupsImpl implements DistributionGroups {
  private readonly client: AppCenterClient;

  /**
   * Initialize a new instance of the class DistributionGroups class.
   * @param client Reference to the service client
   */
  constructor(client: AppCenterClient) {
    this.client = client;
  }

  /**
   * Returns a unique list of users including the whole organization members plus testers in any shared
   * group of that org
   * @param orgName The organization's name
   * @param options The options parameters.
   */
  listAllTestersForOrg(
    orgName: string,
    options?: DistributionGroupsListAllTestersForOrgOptionalParams
  ): Promise<DistributionGroupsListAllTestersForOrgResponse> {
    return this.client.sendOperationRequest(
      { orgName, options },
      listAllTestersForOrgOperationSpec
    );
  }

  /**
   * Returns a list of distribution groups with details for an organization
   * @param orgName The organization's name
   * @param options The options parameters.
   */
  detailsForOrg(
    orgName: string,
    options?: DistributionGroupsDetailsForOrgOptionalParams
  ): Promise<DistributionGroupsDetailsForOrgResponse> {
    return this.client.sendOperationRequest(
      { orgName, options },
      detailsForOrgOperationSpec
    );
  }

  /**
   * Resend shared distribution group invite notification to previously invited testers
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  resendSharedInvite(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsResendSharedInviteOptionalParams
  ): Promise<void> {
    return this.client.sendOperationRequest(
      { orgName, distributionGroupName, options },
      resendSharedInviteOperationSpec
    );
  }

  /**
   * Delete testers from distribution group in an org
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  bulkDeleteUsers(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsBulkDeleteUsersOptionalParams
  ): Promise<void> {
    return this.client.sendOperationRequest(
      { orgName, distributionGroupName, options },
      bulkDeleteUsersOperationSpec
    );
  }

  /**
   * Returns a list of member in the distribution group specified
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  listUsersForOrg(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsListUsersForOrgOptionalParams
  ): Promise<DistributionGroupsListUsersForOrgResponse> {
    return this.client.sendOperationRequest(
      { orgName, distributionGroupName, options },
      listUsersForOrgOperationSpec
    );
  }

  /**
   * Accepts an array of user email addresses to get added to the specified group
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  addUsersForOrg(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsAddUsersForOrgOptionalParams
  ): Promise<DistributionGroupsAddUsersForOrgResponse> {
    return this.client.sendOperationRequest(
      { orgName, distributionGroupName, options },
      addUsersForOrgOperationSpec
    );
  }

  /**
   * Delete apps from distribution group in an org
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  bulkDeleteApps(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsBulkDeleteAppsOptionalParams
  ): Promise<void> {
    return this.client.sendOperationRequest(
      { orgName, distributionGroupName, options },
      bulkDeleteAppsOperationSpec
    );
  }

  /**
   * Get apps from a distribution group in an org
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  getApps(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsGetAppsOptionalParams
  ): Promise<DistributionGroupsGetAppsResponse> {
    return this.client.sendOperationRequest(
      { orgName, distributionGroupName, options },
      getAppsOperationSpec
    );
  }

  /**
   * Add apps to distribution group in an org
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  addApps(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsAddAppsOptionalParams
  ): Promise<void> {
    return this.client.sendOperationRequest(
      { orgName, distributionGroupName, options },
      addAppsOperationSpec
    );
  }

  /**
   * Returns a single distribution group in org for a given distribution group name
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  getForOrg(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsGetForOrgOptionalParams
  ): Promise<DistributionGroupsGetForOrgResponse> {
    return this.client.sendOperationRequest(
      { orgName, distributionGroupName, options },
      getForOrgOperationSpec
    );
  }

  /**
   * Update one given distribution group name in an org
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  patchForOrg(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsPatchForOrgOptionalParams
  ): Promise<DistributionGroupsPatchForOrgResponse> {
    return this.client.sendOperationRequest(
      { orgName, distributionGroupName, options },
      patchForOrgOperationSpec
    );
  }

  /**
   * Deletes a single distribution group from an org with a given distribution group name
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  deleteForOrg(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsDeleteForOrgOptionalParams
  ): Promise<void> {
    return this.client.sendOperationRequest(
      { orgName, distributionGroupName, options },
      deleteForOrgOperationSpec
    );
  }

  /**
   * Creates a disribution goup which can be shared across apps under an organization
   * @param orgName The organization's name
   * @param name The name of the distribution group
   * @param options The options parameters.
   */
  createForOrg(
    orgName: string,
    name: string,
    options?: DistributionGroupsCreateForOrgOptionalParams
  ): Promise<DistributionGroupsCreateForOrgResponse> {
    return this.client.sendOperationRequest(
      { orgName, name, options },
      createForOrgOperationSpec
    );
  }

  /**
   * Returns a list of distribution groups in the org specified
   * @param orgName The organization's name
   * @param options The options parameters.
   */
  listForOrg(
    orgName: string,
    options?: DistributionGroupsListForOrgOptionalParams
  ): Promise<DistributionGroupsListForOrgResponse> {
    return this.client.sendOperationRequest(
      { orgName, options },
      listForOrgOperationSpec
    );
  }

  /**
   * Resend distribution group app invite notification to previously invited testers
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  resendInvite(
    ownerName: string,
    appName: string,
    distributionGroupName: string,
    options?: DistributionGroupsResendInviteOptionalParams
  ): Promise<void> {
    return this.client.sendOperationRequest(
      { ownerName, appName, distributionGroupName, options },
      resendInviteOperationSpec
    );
  }

  /**
   * Remove the users from the distribution group
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  removeUser(
    ownerName: string,
    appName: string,
    distributionGroupName: string,
    options?: DistributionGroupsRemoveUserOptionalParams
  ): Promise<DistributionGroupsRemoveUserResponse> {
    return this.client.sendOperationRequest(
      { ownerName, appName, distributionGroupName, options },
      removeUserOperationSpec
    );
  }

  /**
   * Returns a list of member details in the distribution group specified
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  listUsers(
    ownerName: string,
    appName: string,
    distributionGroupName: string,
    options?: DistributionGroupsListUsersOptionalParams
  ): Promise<DistributionGroupsListUsersResponse> {
    return this.client.sendOperationRequest(
      { ownerName, appName, distributionGroupName, options },
      listUsersOperationSpec
    );
  }

  /**
   * Adds the members to the specified distribution group
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  addUser(
    ownerName: string,
    appName: string,
    distributionGroupName: string,
    options?: DistributionGroupsAddUserOptionalParams
  ): Promise<DistributionGroupsAddUserResponse> {
    return this.client.sendOperationRequest(
      { ownerName, appName, distributionGroupName, options },
      addUserOperationSpec
    );
  }

  /**
   * Returns a single distribution group for a given distribution group name
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  get(
    ownerName: string,
    appName: string,
    distributionGroupName: string,
    options?: DistributionGroupsGetOptionalParams
  ): Promise<DistributionGroupsGetResponse> {
    return this.client.sendOperationRequest(
      { ownerName, appName, distributionGroupName, options },
      getOperationSpec
    );
  }

  /**
   * Updates the attributes of distribution group
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  update(
    ownerName: string,
    appName: string,
    distributionGroupName: string,
    options?: DistributionGroupsUpdateOptionalParams
  ): Promise<DistributionGroupsUpdateResponse> {
    return this.client.sendOperationRequest(
      { ownerName, appName, distributionGroupName, options },
      updateOperationSpec
    );
  }

  /**
   * Deletes a distribution group
   * @param appName The name of the application
   * @param ownerName The name of the owner
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  delete(
    appName: string,
    ownerName: string,
    distributionGroupName: string,
    options?: DistributionGroupsDeleteOptionalParams
  ): Promise<void> {
    return this.client.sendOperationRequest(
      { appName, ownerName, distributionGroupName, options },
      deleteOperationSpec
    );
  }

  /**
   * Returns a list of distribution groups in the app specified
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  list(
    ownerName: string,
    appName: string,
    options?: DistributionGroupsListOptionalParams
  ): Promise<DistributionGroupsListResponse> {
    return this.client.sendOperationRequest(
      { ownerName, appName, options },
      listOperationSpec
    );
  }

  /**
   * Creates a new distribution group and returns it to the caller
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param name The name of the distribution group
   * @param options The options parameters.
   */
  create(
    ownerName: string,
    appName: string,
    name: string,
    options?: DistributionGroupsCreateOptionalParams
  ): Promise<DistributionGroupsCreateResponse> {
    return this.client.sendOperationRequest(
      { ownerName, appName, name, options },
      createOperationSpec
    );
  }
}
// Operation Specifications
const serializer = coreClient.createSerializer(Mappers, /* isXml */ false);

const listAllTestersForOrgOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/orgs/{org_name}/testers",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper: {
        type: {
          name: "Sequence",
          element: {
            type: {
              name: "Composite",
              className:
                "PathsZcvkocV01OrgsOrgNameTestersGetResponses200ContentApplicationJsonSchemaItems"
            }
          }
        }
      }
    },
    default: {
      bodyMapper:
        Mappers.Paths10C9NtgV01OrgsOrgNameTestersGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [Parameters.$host, Parameters.orgName],
  headerParameters: [Parameters.accept],
  serializer
};
const detailsForOrgOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/orgs/{org_name}/distribution_groups_details",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper: {
        type: {
          name: "Sequence",
          element: {
            type: {
              name: "Composite",
              className:
                "PathsN5ZsaaV01OrgsOrgNameDistributionGroupsDetailsGetResponses200ContentApplicationJsonSchemaItems"
            }
          }
        }
      }
    },
    default: {
      bodyMapper:
        Mappers.Paths1Qqyun6V01OrgsOrgNameDistributionGroupsDetailsGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.appsLimit],
  urlParameters: [Parameters.$host, Parameters.orgName],
  headerParameters: [Parameters.accept],
  serializer
};
const resendSharedInviteOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/orgs/{org_name}/distribution_groups/{distribution_group_name}/resend_invite",
  httpMethod: "POST",
  responses: {
    204: {},
    default: {
      bodyMapper:
        Mappers.Paths1Mw5PtqV01OrgsOrgNameDistributionGroupsDistributionGroupNameResendInvitePostResponsesDefaultContentApplicationJsonSchema
    }
  },
  requestBody: {
    parameterPath: { userEmails: ["options", "userEmails"] },
    mapper: {
      ...Mappers.Paths3EixoV01OrgsOrgNameDistributionGroupsDistributionGroupNameResendInvitePostRequestbodyContentApplicationJsonSchema,
      required: true
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.distributionGroupName,
    Parameters.orgName
  ],
  headerParameters: [Parameters.contentType, Parameters.accept],
  mediaType: "json",
  serializer
};
const bulkDeleteUsersOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/orgs/{org_name}/distribution_groups/{distribution_group_name}/members/bulk_delete",
  httpMethod: "POST",
  responses: { 204: {} },
  requestBody: {
    parameterPath: { userEmails: ["options", "userEmails"] },
    mapper: {
      ...Mappers.Paths10EomnwV01OrgsOrgNameDistributionGroupsDistributionGroupNameMembersBulkDeletePostRequestbodyContentApplicationJsonSchema,
      required: true
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.distributionGroupName,
    Parameters.orgName
  ],
  headerParameters: [Parameters.contentType],
  mediaType: "json",
  serializer
};
const listUsersForOrgOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/orgs/{org_name}/distribution_groups/{distribution_group_name}/members",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper: {
        type: {
          name: "Sequence",
          element: {
            type: {
              name: "Composite",
              className:
                "Paths1Emeq4QV01OrgsOrgNameDistributionGroupsDistributionGroupNameMembersGetResponses200ContentApplicationJsonSchemaItems"
            }
          }
        }
      }
    },
    default: {
      bodyMapper:
        Mappers.Paths1Xv7MxwV01OrgsOrgNameDistributionGroupsDistributionGroupNameMembersGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.distributionGroupName,
    Parameters.orgName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const addUsersForOrgOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/orgs/{org_name}/distribution_groups/{distribution_group_name}/members",
  httpMethod: "POST",
  responses: {
    200: {
      bodyMapper: {
        type: {
          name: "Sequence",
          element: {
            type: {
              name: "Composite",
              className: "Post200ApplicationJsonItemsItem"
            }
          }
        }
      }
    },
    default: {
      bodyMapper:
        Mappers.Paths1Bvy48CV01OrgsOrgNameDistributionGroupsDistributionGroupNameMembersPostResponsesDefaultContentApplicationJsonSchema
    }
  },
  requestBody: {
    parameterPath: { userEmails: ["options", "userEmails"] },
    mapper: {
      ...Mappers.PathsSmhj37V01OrgsOrgNameDistributionGroupsDistributionGroupNameMembersPostRequestbodyContentApplicationJsonSchema,
      required: true
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.distributionGroupName,
    Parameters.orgName
  ],
  headerParameters: [Parameters.contentType, Parameters.accept],
  mediaType: "json",
  serializer
};
const bulkDeleteAppsOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/orgs/{org_name}/distribution_groups/{distribution_group_name}/apps/bulk_delete",
  httpMethod: "POST",
  responses: { 204: {} },
  requestBody: {
    parameterPath: { apps: ["options", "apps"] },
    mapper: {
      ...Mappers.PathsMs4QhdV01OrgsOrgNameDistributionGroupsDistributionGroupNameAppsBulkDeletePostRequestbodyContentApplicationJsonSchema,
      required: true
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.distributionGroupName,
    Parameters.orgName
  ],
  headerParameters: [Parameters.contentType],
  mediaType: "json",
  serializer
};
const getAppsOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/orgs/{org_name}/distribution_groups/{distribution_group_name}/apps",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper: {
        type: {
          name: "Sequence",
          element: {
            type: {
              name: "Composite",
              className:
                "Paths1FzizdmV01OrgsOrgNameDistributionGroupsDistributionGroupNameAppsGetResponses200ContentApplicationJsonSchemaItems"
            }
          }
        }
      }
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.distributionGroupName,
    Parameters.orgName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const addAppsOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/orgs/{org_name}/distribution_groups/{distribution_group_name}/apps",
  httpMethod: "POST",
  responses: { 204: {} },
  requestBody: {
    parameterPath: { apps: ["options", "apps"] },
    mapper: {
      ...Mappers.PathsIy66N7V01OrgsOrgNameDistributionGroupsDistributionGroupNameAppsPostRequestbodyContentApplicationJsonSchema,
      required: true
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.distributionGroupName,
    Parameters.orgName
  ],
  headerParameters: [Parameters.contentType],
  mediaType: "json",
  serializer
};
const getForOrgOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/orgs/{org_name}/distribution_groups/{distribution_group_name}",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths1O9EmfnV01OrgsOrgNameDistributionGroupsDistributionGroupNameGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths18ObgfsV01OrgsOrgNameDistributionGroupsDistributionGroupNameGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.distributionGroupName,
    Parameters.orgName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const patchForOrgOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/orgs/{org_name}/distribution_groups/{distribution_group_name}",
  httpMethod: "PATCH",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths8Ig5HaV01OrgsOrgNameDistributionGroupsDistributionGroupNamePatchResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.PathsFf3Vb5V01OrgsOrgNameDistributionGroupsDistributionGroupNamePatchResponsesDefaultContentApplicationJsonSchema
    }
  },
  requestBody: {
    parameterPath: {
      name: ["options", "name"],
      isPublic: ["options", "isPublic"]
    },
    mapper: {
      ...Mappers.Paths6RaacuV01OrgsOrgNameDistributionGroupsDistributionGroupNamePatchRequestbodyContentApplicationJsonSchema,
      required: true
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.distributionGroupName,
    Parameters.orgName
  ],
  headerParameters: [Parameters.contentType, Parameters.accept],
  mediaType: "json",
  serializer
};
const deleteForOrgOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/orgs/{org_name}/distribution_groups/{distribution_group_name}",
  httpMethod: "DELETE",
  responses: {
    200: {},
    default: {
      bodyMapper:
        Mappers.PathsG4K3OdV01OrgsOrgNameDistributionGroupsDistributionGroupNameDeleteResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.distributionGroupName,
    Parameters.orgName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const createForOrgOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/orgs/{org_name}/distribution_groups",
  httpMethod: "POST",
  responses: {
    201: {
      bodyMapper:
        Mappers.Paths19Pq8TpV01OrgsOrgNameDistributionGroupsPostResponses201ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths210VmzV01OrgsOrgNameDistributionGroupsPostResponsesDefaultContentApplicationJsonSchema
    }
  },
  requestBody: {
    parameterPath: { name: ["name"], displayName: ["options", "displayName"] },
    mapper: {
      ...Mappers.Paths150Qpz7V01OrgsOrgNameDistributionGroupsPostRequestbodyContentApplicationJsonSchema,
      required: true
    }
  },
  urlParameters: [Parameters.$host, Parameters.orgName],
  headerParameters: [Parameters.contentType, Parameters.accept],
  mediaType: "json",
  serializer
};
const listForOrgOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/orgs/{org_name}/distribution_groups",
  httpMethod: "GET",
  responses: {
    201: {
      bodyMapper: {
        type: {
          name: "Sequence",
          element: {
            type: {
              name: "Composite",
              className: "Get201ApplicationJsonItemsItem"
            }
          }
        }
      }
    },
    default: {
      bodyMapper:
        Mappers.Paths5T6Uy5V01OrgsOrgNameDistributionGroupsGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [Parameters.$host, Parameters.orgName],
  headerParameters: [Parameters.accept],
  serializer
};
const resendInviteOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/distribution_groups/{distribution_group_name}/resend_invite",
  httpMethod: "POST",
  responses: {
    204: {},
    default: {
      bodyMapper:
        Mappers.Paths1NlleszV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNameResendInvitePostResponsesDefaultContentApplicationJsonSchema
    }
  },
  requestBody: {
    parameterPath: { userEmails: ["options", "userEmails"] },
    mapper: {
      ...Mappers.Paths1C26JzV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNameResendInvitePostRequestbodyContentApplicationJsonSchema,
      required: true
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.distributionGroupName
  ],
  headerParameters: [Parameters.contentType, Parameters.accept],
  mediaType: "json",
  serializer
};
const removeUserOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/distribution_groups/{distribution_group_name}/members/bulk_delete",
  httpMethod: "POST",
  responses: {
    200: {
      bodyMapper: {
        type: {
          name: "Sequence",
          element: {
            type: {
              name: "Composite",
              className:
                "PathsH5A3IoV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNameMembersBulkDeletePostResponses200ContentApplicationJsonSchemaItems"
            }
          }
        }
      }
    },
    default: {
      bodyMapper:
        Mappers.PathsAiyp0KV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNameMembersBulkDeletePostResponsesDefaultContentApplicationJsonSchema
    }
  },
  requestBody: {
    parameterPath: { userEmails: ["options", "userEmails"] },
    mapper: {
      ...Mappers.PathsLx7ZdvV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNameMembersBulkDeletePostRequestbodyContentApplicationJsonSchema,
      required: true
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.distributionGroupName
  ],
  headerParameters: [Parameters.contentType, Parameters.accept],
  mediaType: "json",
  serializer
};
const listUsersOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/distribution_groups/{distribution_group_name}/members",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper: {
        type: {
          name: "Sequence",
          element: {
            type: {
              name: "Composite",
              className:
                "PathsV8RijtV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNameMembersGetResponses200ContentApplicationJsonSchemaItems"
            }
          }
        }
      }
    },
    default: {
      bodyMapper:
        Mappers.PathsDswa3EV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNameMembersGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.excludePendingInvitations],
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.distributionGroupName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const addUserOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/distribution_groups/{distribution_group_name}/members",
  httpMethod: "POST",
  responses: {
    200: {
      bodyMapper: {
        type: {
          name: "Sequence",
          element: {
            type: {
              name: "Composite",
              className:
                "PathsQb9V9JV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNameMembersPostResponses200ContentApplicationJsonSchemaItems"
            }
          }
        }
      }
    },
    default: {
      bodyMapper:
        Mappers.Paths27EeybV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNameMembersPostResponsesDefaultContentApplicationJsonSchema
    }
  },
  requestBody: {
    parameterPath: { userEmails: ["options", "userEmails"] },
    mapper: {
      ...Mappers.Paths9330UyV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNameMembersPostRequestbodyContentApplicationJsonSchema,
      required: true
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.distributionGroupName
  ],
  headerParameters: [Parameters.contentType, Parameters.accept],
  mediaType: "json",
  serializer
};
const getOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/distribution_groups/{distribution_group_name}",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths1Wh2QvoV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNameGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.PathsM9Ao2YV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNameGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.distributionGroupName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const updateOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/distribution_groups/{distribution_group_name}",
  httpMethod: "PATCH",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths15Yrg8NV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNamePatchResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths1Nibs8HV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNamePatchResponsesDefaultContentApplicationJsonSchema
    }
  },
  requestBody: {
    parameterPath: {
      name: ["options", "name"],
      isPublic: ["options", "isPublic"]
    },
    mapper: {
      ...Mappers.Paths1Y98SmdV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNamePatchRequestbodyContentApplicationJsonSchema,
      required: true
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.distributionGroupName
  ],
  headerParameters: [Parameters.contentType, Parameters.accept],
  mediaType: "json",
  serializer
};
const deleteOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/distribution_groups/{distribution_group_name}",
  httpMethod: "DELETE",
  responses: {
    204: {},
    default: {
      bodyMapper:
        Mappers.PathsKwupmvV01AppsOwnerNameAppNameDistributionGroupsDistributionGroupNameDeleteResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.distributionGroupName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const listOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/distribution_groups",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper: {
        type: {
          name: "Sequence",
          element: {
            type: {
              name: "Composite",
              className:
                "Paths1O1HkymV01AppsOwnerNameAppNameDistributionGroupsGetResponses200ContentApplicationJsonSchemaItems"
            }
          }
        }
      }
    },
    default: {
      bodyMapper:
        Mappers.Paths9Wjl67V01AppsOwnerNameAppNameDistributionGroupsGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const createOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/distribution_groups",
  httpMethod: "POST",
  responses: {
    201: {
      bodyMapper:
        Mappers.Paths7NhijrV01AppsOwnerNameAppNameDistributionGroupsPostResponses201ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths5IifpfV01AppsOwnerNameAppNameDistributionGroupsPostResponsesDefaultContentApplicationJsonSchema
    }
  },
  requestBody: {
    parameterPath: { name: ["name"], displayName: ["options", "displayName"] },
    mapper: {
      ...Mappers.PathsFdbuo5V01AppsOwnerNameAppNameDistributionGroupsPostRequestbodyContentApplicationJsonSchema,
      required: true
    }
  },
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.contentType, Parameters.accept],
  mediaType: "json",
  serializer
};
