/* tslint:disable */
/* eslint-disable */
/**
 * authentik
 * Making authentication simple.
 *
 * The version of the OpenAPI document: 2026.5.3
 * Contact: hello@goauthentik.io
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

/**
 * RACPropertyMapping Serializer
 * @export
 * @interface RACPropertyMapping
 */
export interface RACPropertyMapping {
    /**
     *
     * @type {string}
     * @memberof RACPropertyMapping
     */
    readonly pk: string;
    /**
     * Objects that are managed by authentik. These objects are created and updated automatically. This flag only indicates that an object can be overwritten by migrations. You can still modify the objects via the API, but expect changes to be overwritten in a later update.
     * @type {string}
     * @memberof RACPropertyMapping
     */
    managed?: string | null;
    /**
     *
     * @type {string}
     * @memberof RACPropertyMapping
     */
    name: string;
    /**
     *
     * @type {string}
     * @memberof RACPropertyMapping
     */
    expression?: string;
    /**
     * Get object's component so that we know how to edit the object
     * @type {string}
     * @memberof RACPropertyMapping
     */
    readonly component: string;
    /**
     * Return object's verbose_name
     * @type {string}
     * @memberof RACPropertyMapping
     */
    readonly verboseName: string;
    /**
     * Return object's plural verbose_name
     * @type {string}
     * @memberof RACPropertyMapping
     */
    readonly verboseNamePlural: string;
    /**
     * Return internal model name
     * @type {string}
     * @memberof RACPropertyMapping
     */
    readonly metaModelName: string;
    /**
     *
     * @type {{ [key: string]: any; }}
     * @memberof RACPropertyMapping
     */
    staticSettings: { [key: string]: any };
}

/**
 * Check if a given object implements the RACPropertyMapping interface.
 */
export function instanceOfRACPropertyMapping(value: object): value is RACPropertyMapping {
    if (!("pk" in value) || value["pk"] === undefined) return false;
    if (!("name" in value) || value["name"] === undefined) return false;
    if (!("component" in value) || value["component"] === undefined) return false;
    if (!("verboseName" in value) || value["verboseName"] === undefined) return false;
    if (!("verboseNamePlural" in value) || value["verboseNamePlural"] === undefined) return false;
    if (!("metaModelName" in value) || value["metaModelName"] === undefined) return false;
    if (!("staticSettings" in value) || value["staticSettings"] === undefined) return false;
    return true;
}

export function RACPropertyMappingFromJSON(json: any): RACPropertyMapping {
    return RACPropertyMappingFromJSONTyped(json, false);
}

export function RACPropertyMappingFromJSONTyped(
    json: any,
    ignoreDiscriminator: boolean,
): RACPropertyMapping {
    if (json == null) {
        return json;
    }
    return {
        pk: json["pk"],
        managed: json["managed"] == null ? undefined : json["managed"],
        name: json["name"],
        expression: json["expression"] == null ? undefined : json["expression"],
        component: json["component"],
        verboseName: json["verbose_name"],
        verboseNamePlural: json["verbose_name_plural"],
        metaModelName: json["meta_model_name"],
        staticSettings: json["static_settings"],
    };
}

export function RACPropertyMappingToJSON(json: any): RACPropertyMapping {
    return RACPropertyMappingToJSONTyped(json, false);
}

export function RACPropertyMappingToJSONTyped(
    value?: Omit<
        RACPropertyMapping,
        "pk" | "component" | "verbose_name" | "verbose_name_plural" | "meta_model_name"
    > | null,
    ignoreDiscriminator: boolean = false,
): any {
    if (value == null) {
        return value;
    }

    return {
        managed: value["managed"],
        name: value["name"],
        expression: value["expression"],
        static_settings: value["staticSettings"],
    };
}
