/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 */

import { ratelimitDeleteOverride } from "../funcs/ratelimitDeleteOverride.js";
import { ratelimitGetOverride } from "../funcs/ratelimitGetOverride.js";
import { ratelimitLimit } from "../funcs/ratelimitLimit.js";
import { ratelimitListOverrides } from "../funcs/ratelimitListOverrides.js";
import { ratelimitSetOverride } from "../funcs/ratelimitSetOverride.js";
import { ClientSDK, RequestOptions } from "../lib/sdks.js";
import * as components from "../models/components/index.js";
import { unwrapAsync } from "../types/fp.js";

export class Ratelimit extends ClientSDK {
  async limit(
    request: components.V2RatelimitLimitRequestBody,
    options?: RequestOptions,
  ): Promise<components.V2RatelimitLimitResponseBody> {
    return unwrapAsync(ratelimitLimit(
      this,
      request,
      options,
    ));
  }

  async setOverride(
    request: components.V2RatelimitSetOverrideRequestBody,
    options?: RequestOptions,
  ): Promise<components.V2RatelimitSetOverrideResponseBody> {
    return unwrapAsync(ratelimitSetOverride(
      this,
      request,
      options,
    ));
  }

  async getOverride(
    request: components.V2RatelimitGetOverrideRequestBody,
    options?: RequestOptions,
  ): Promise<components.V2RatelimitGetOverrideResponseBody> {
    return unwrapAsync(ratelimitGetOverride(
      this,
      request,
      options,
    ));
  }

  async listOverrides(
    request: components.V2RatelimitListOverridesRequestBody,
    options?: RequestOptions,
  ): Promise<components.V2RatelimitListOverridesResponseBody> {
    return unwrapAsync(ratelimitListOverrides(
      this,
      request,
      options,
    ));
  }

  async deleteOverride(
    request: components.V2RatelimitDeleteOverrideRequestBody,
    options?: RequestOptions,
  ): Promise<components.V2RatelimitDeleteOverrideResponseBody> {
    return unwrapAsync(ratelimitDeleteOverride(
      this,
      request,
      options,
    ));
  }
}
