/* tslint:disable */
/* eslint-disable */
/**
 * Ringer Business API
 * This API provides comprehensive endpoints for the Ringer Business system. It includes functionality for managing customer accounts, addresses, sites,  phone numbers, payments, users, and other business resources.  Operations typically require authentication and appropriate permissions. 
 *
 * The version of the OpenAPI document: 1.0.5
 * Contact: support@ringer.tel
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import { mapValues } from '../runtime';
import type { MenuResponse } from './MenuResponse';
import {
    MenuResponseFromJSON,
    MenuResponseFromJSONTyped,
    MenuResponseToJSON,
    MenuResponseToJSONTyped,
} from './MenuResponse';
import type { Link } from './Link';
import {
    LinkFromJSON,
    LinkFromJSONTyped,
    LinkToJSON,
    LinkToJSONTyped,
} from './Link';

/**
 * A paginated list of menus.
 * @export
 * @interface PaginatedMenuListResponse
 */
export interface PaginatedMenuListResponse {
    /**
     * 
     * @type {Array<MenuResponse>}
     * @memberof PaginatedMenuListResponse
     */
    menus: Array<MenuResponse>;
    /**
     * 
     * @type {number}
     * @memberof PaginatedMenuListResponse
     */
    totalItems: number;
    /**
     * 
     * @type {number}
     * @memberof PaginatedMenuListResponse
     */
    totalPages: number;
    /**
     * 
     * @type {number}
     * @memberof PaginatedMenuListResponse
     */
    currentPage: number;
    /**
     * 
     * @type {number}
     * @memberof PaginatedMenuListResponse
     */
    perPage: number;
    /**
     * 
     * @type {Array<Link>}
     * @memberof PaginatedMenuListResponse
     */
    links?: Array<Link> | null;
}

/**
 * Check if a given object implements the PaginatedMenuListResponse interface.
 */
export function instanceOfPaginatedMenuListResponse(value: object): value is PaginatedMenuListResponse {
    if (!('menus' in value) || value['menus'] === undefined) return false;
    if (!('totalItems' in value) || value['totalItems'] === undefined) return false;
    if (!('totalPages' in value) || value['totalPages'] === undefined) return false;
    if (!('currentPage' in value) || value['currentPage'] === undefined) return false;
    if (!('perPage' in value) || value['perPage'] === undefined) return false;
    return true;
}

export function PaginatedMenuListResponseFromJSON(json: any): PaginatedMenuListResponse {
    return PaginatedMenuListResponseFromJSONTyped(json, false);
}

export function PaginatedMenuListResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaginatedMenuListResponse {
    if (json == null) {
        return json;
    }
    return {
        
        'menus': ((json['menus'] as Array<any>).map(MenuResponseFromJSON)),
        'totalItems': json['total_items'],
        'totalPages': json['total_pages'],
        'currentPage': json['current_page'],
        'perPage': json['per_page'],
        'links': json['links'] == null ? undefined : ((json['links'] as Array<any>).map(LinkFromJSON)),
    };
}

export function PaginatedMenuListResponseToJSON(json: any): PaginatedMenuListResponse {
    return PaginatedMenuListResponseToJSONTyped(json, false);
}

export function PaginatedMenuListResponseToJSONTyped(value?: PaginatedMenuListResponse | null, ignoreDiscriminator: boolean = false): any {
    if (value == null) {
        return value;
    }

    return {
        
        'menus': ((value['menus'] as Array<any>).map(MenuResponseToJSON)),
        'total_items': value['totalItems'],
        'total_pages': value['totalPages'],
        'current_page': value['currentPage'],
        'per_page': value['perPage'],
        'links': value['links'] == null ? undefined : ((value['links'] as Array<any>).map(LinkToJSON)),
    };
}

