/* 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 {
    StreamflowMeasurement,
    StreamflowMeasurementFromJSON,
    StreamflowMeasurementFromJSONTyped,
    StreamflowMeasurementToJSON,
} from './StreamflowMeasurement';
import {
    SupplementalStreamflowMeasurement,
    SupplementalStreamflowMeasurementFromJSON,
    SupplementalStreamflowMeasurementFromJSONTyped,
    SupplementalStreamflowMeasurementToJSON,
} from './SupplementalStreamflowMeasurement';
import {
    UsgsMeasurement,
    UsgsMeasurementFromJSON,
    UsgsMeasurementFromJSONTyped,
    UsgsMeasurementToJSON,
} from './UsgsMeasurement';

/**
 * 
 * @export
 * @interface Measurement
 */
export interface Measurement {
    /**
     * 
     * @type {string}
     * @memberof Measurement
     */
    heightUnit?: string;
    /**
     * 
     * @type {string}
     * @memberof Measurement
     */
    flowUnit?: string;
    /**
     * 
     * @type {string}
     * @memberof Measurement
     */
    tempUnit?: string;
    /**
     * 
     * @type {string}
     * @memberof Measurement
     */
    velocityUnit?: string;
    /**
     * 
     * @type {string}
     * @memberof Measurement
     */
    areaUnit?: string;
    /**
     * 
     * @type {boolean}
     * @memberof Measurement
     */
    used?: boolean;
    /**
     * 
     * @type {string}
     * @memberof Measurement
     */
    agency?: string;
    /**
     * 
     * @type {string}
     * @memberof Measurement
     */
    party?: string;
    /**
     * 
     * @type {string}
     * @memberof Measurement
     */
    wmComments?: string;
    /**
     * 
     * @type {Date}
     * @memberof Measurement
     */
    instant: Date;
    /**
     * 
     * @type {CwmsId}
     * @memberof Measurement
     */
    id: CwmsId;
    /**
     * 
     * @type {string}
     * @memberof Measurement
     */
    number: string;
    /**
     * 
     * @type {StreamflowMeasurement}
     * @memberof Measurement
     */
    streamflowMeasurement?: StreamflowMeasurement;
    /**
     * 
     * @type {SupplementalStreamflowMeasurement}
     * @memberof Measurement
     */
    supplementalStreamflowMeasurement?: SupplementalStreamflowMeasurement;
    /**
     * 
     * @type {UsgsMeasurement}
     * @memberof Measurement
     */
    usgsMeasurement?: UsgsMeasurement;
}

export function MeasurementFromJSON(json: any): Measurement {
    return MeasurementFromJSONTyped(json, false);
}

export function MeasurementFromJSONTyped(json: any, ignoreDiscriminator: boolean): Measurement {
    if ((json === undefined) || (json === null)) {
        return json;
    }
    return {
        
        'heightUnit': !exists(json, 'height-unit') ? undefined : json['height-unit'],
        'flowUnit': !exists(json, 'flow-unit') ? undefined : json['flow-unit'],
        'tempUnit': !exists(json, 'temp-unit') ? undefined : json['temp-unit'],
        'velocityUnit': !exists(json, 'velocity-unit') ? undefined : json['velocity-unit'],
        'areaUnit': !exists(json, 'area-unit') ? undefined : json['area-unit'],
        'used': !exists(json, 'used') ? undefined : json['used'],
        'agency': !exists(json, 'agency') ? undefined : json['agency'],
        'party': !exists(json, 'party') ? undefined : json['party'],
        'wmComments': !exists(json, 'wm-comments') ? undefined : json['wm-comments'],
        'instant': (new Date(json['instant'])),
        'id': CwmsIdFromJSON(json['id']),
        'number': json['number'],
        'streamflowMeasurement': !exists(json, 'streamflow-measurement') ? undefined : StreamflowMeasurementFromJSON(json['streamflow-measurement']),
        'supplementalStreamflowMeasurement': !exists(json, 'supplemental-streamflow-measurement') ? undefined : SupplementalStreamflowMeasurementFromJSON(json['supplemental-streamflow-measurement']),
        'usgsMeasurement': !exists(json, 'usgs-measurement') ? undefined : UsgsMeasurementFromJSON(json['usgs-measurement']),
    };
}

export function MeasurementToJSON(value?: Measurement | null): any {
    if (value === undefined) {
        return undefined;
    }
    if (value === null) {
        return null;
    }
    return {
        
        'height-unit': value.heightUnit,
        'flow-unit': value.flowUnit,
        'temp-unit': value.tempUnit,
        'velocity-unit': value.velocityUnit,
        'area-unit': value.areaUnit,
        'used': value.used,
        'agency': value.agency,
        'party': value.party,
        'wm-comments': value.wmComments,
        'instant': (value.instant.toISOString()),
        'id': CwmsIdToJSON(value.id),
        'number': value.number,
        'streamflow-measurement': StreamflowMeasurementToJSON(value.streamflowMeasurement),
        'supplemental-streamflow-measurement': SupplementalStreamflowMeasurementToJSON(value.supplementalStreamflowMeasurement),
        'usgs-measurement': UsgsMeasurementToJSON(value.usgsMeasurement),
    };
}

