/* tslint:disable */
/* eslint-disable */
/**
 * CWMS Data API
 * CWMS REST API for Data Retrieval
 *
 * The version of the OpenAPI document: 2.4.0-2026.3.16
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import { exists, mapValues } from '../runtime';
import {
    CwmsId,
    CwmsIdFromJSON,
    CwmsIdFromJSONTyped,
    CwmsIdToJSON,
} from './CwmsId';
import {
    Location,
    LocationFromJSON,
    LocationFromJSONTyped,
    LocationToJSON,
} from './Location';
import {
    LockLocationLevelRef,
    LockLocationLevelRefFromJSON,
    LockLocationLevelRefFromJSONTyped,
    LockLocationLevelRefToJSON,
} from './LockLocationLevelRef';
import {
    LookupType,
    LookupTypeFromJSON,
    LookupTypeFromJSONTyped,
    LookupTypeToJSON,
} from './LookupType';

/**
 * 
 * @export
 * @interface Lock
 */
export interface Lock {
    /**
     * 
     * @type {CwmsId}
     * @memberof Lock
     */
    projectId: CwmsId;
    /**
     * 
     * @type {Location}
     * @memberof Lock
     */
    location: Location;
    /**
     * 
     * @type {LookupType}
     * @memberof Lock
     */
    chamberType?: LookupType;
    /**
     * 
     * @type {number}
     * @memberof Lock
     */
    lockWidth?: number;
    /**
     * 
     * @type {number}
     * @memberof Lock
     */
    lockLength?: number;
    /**
     * 
     * @type {number}
     * @memberof Lock
     */
    normalLockLift?: number;
    /**
     * 
     * @type {number}
     * @memberof Lock
     */
    maximumLockLift?: number;
    /**
     * 
     * @type {string}
     * @memberof Lock
     */
    lengthUnits?: string;
    /**
     * 
     * @type {string}
     * @memberof Lock
     */
    volumeUnits?: string;
    /**
     * 
     * @type {number}
     * @memberof Lock
     */
    volumePerLockage?: number;
    /**
     * 
     * @type {number}
     * @memberof Lock
     */
    minimumDraft?: number;
    /**
     * 
     * @type {LockLocationLevelRef}
     * @memberof Lock
     */
    highWaterUpperPoolLocationLevel?: LockLocationLevelRef;
    /**
     * 
     * @type {LockLocationLevelRef}
     * @memberof Lock
     */
    lowWaterLowerPoolLocationLevel?: LockLocationLevelRef;
    /**
     * 
     * @type {LockLocationLevelRef}
     * @memberof Lock
     */
    highWaterLowerPoolLocationLevel?: LockLocationLevelRef;
    /**
     * 
     * @type {LockLocationLevelRef}
     * @memberof Lock
     */
    lowWaterUpperPoolLocationLevel?: LockLocationLevelRef;
    /**
     * 
     * @type {number}
     * @memberof Lock
     */
    highWaterUpperPoolWarningLevel?: number;
    /**
     * 
     * @type {number}
     * @memberof Lock
     */
    highWaterLowerPoolWarningLevel?: number;
    /**
     * 
     * @type {string}
     * @memberof Lock
     */
    elevationUnits?: string;
}

export function LockFromJSON(json: any): Lock {
    return LockFromJSONTyped(json, false);
}

export function LockFromJSONTyped(json: any, ignoreDiscriminator: boolean): Lock {
    if ((json === undefined) || (json === null)) {
        return json;
    }
    return {
        
        'projectId': CwmsIdFromJSON(json['project-id']),
        'location': LocationFromJSON(json['location']),
        'chamberType': !exists(json, 'chamber-type') ? undefined : LookupTypeFromJSON(json['chamber-type']),
        'lockWidth': !exists(json, 'lock-width') ? undefined : json['lock-width'],
        'lockLength': !exists(json, 'lock-length') ? undefined : json['lock-length'],
        'normalLockLift': !exists(json, 'normal-lock-lift') ? undefined : json['normal-lock-lift'],
        'maximumLockLift': !exists(json, 'maximum-lock-lift') ? undefined : json['maximum-lock-lift'],
        'lengthUnits': !exists(json, 'length-units') ? undefined : json['length-units'],
        'volumeUnits': !exists(json, 'volume-units') ? undefined : json['volume-units'],
        'volumePerLockage': !exists(json, 'volume-per-lockage') ? undefined : json['volume-per-lockage'],
        'minimumDraft': !exists(json, 'minimum-draft') ? undefined : json['minimum-draft'],
        'highWaterUpperPoolLocationLevel': !exists(json, 'high-water-upper-pool-location-level') ? undefined : LockLocationLevelRefFromJSON(json['high-water-upper-pool-location-level']),
        'lowWaterLowerPoolLocationLevel': !exists(json, 'low-water-lower-pool-location-level') ? undefined : LockLocationLevelRefFromJSON(json['low-water-lower-pool-location-level']),
        'highWaterLowerPoolLocationLevel': !exists(json, 'high-water-lower-pool-location-level') ? undefined : LockLocationLevelRefFromJSON(json['high-water-lower-pool-location-level']),
        'lowWaterUpperPoolLocationLevel': !exists(json, 'low-water-upper-pool-location-level') ? undefined : LockLocationLevelRefFromJSON(json['low-water-upper-pool-location-level']),
        'highWaterUpperPoolWarningLevel': !exists(json, 'high-water-upper-pool-warning-level') ? undefined : json['high-water-upper-pool-warning-level'],
        'highWaterLowerPoolWarningLevel': !exists(json, 'high-water-lower-pool-warning-level') ? undefined : json['high-water-lower-pool-warning-level'],
        'elevationUnits': !exists(json, 'elevation-units') ? undefined : json['elevation-units'],
    };
}

export function LockToJSON(value?: Lock | null): any {
    if (value === undefined) {
        return undefined;
    }
    if (value === null) {
        return null;
    }
    return {
        
        'project-id': CwmsIdToJSON(value.projectId),
        'location': LocationToJSON(value.location),
        'chamber-type': LookupTypeToJSON(value.chamberType),
        'lock-width': value.lockWidth,
        'lock-length': value.lockLength,
        'normal-lock-lift': value.normalLockLift,
        'maximum-lock-lift': value.maximumLockLift,
        'length-units': value.lengthUnits,
        'volume-units': value.volumeUnits,
        'volume-per-lockage': value.volumePerLockage,
        'minimum-draft': value.minimumDraft,
        'high-water-upper-pool-location-level': LockLocationLevelRefToJSON(value.highWaterUpperPoolLocationLevel),
        'low-water-lower-pool-location-level': LockLocationLevelRefToJSON(value.lowWaterLowerPoolLocationLevel),
        'high-water-lower-pool-location-level': LockLocationLevelRefToJSON(value.highWaterLowerPoolLocationLevel),
        'low-water-upper-pool-location-level': LockLocationLevelRefToJSON(value.lowWaterUpperPoolLocationLevel),
        'high-water-upper-pool-warning-level': value.highWaterUpperPoolWarningLevel,
        'high-water-lower-pool-warning-level': value.highWaterLowerPoolWarningLevel,
        'elevation-units': value.elevationUnits,
    };
}

