/* 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 {
    StreamNode,
    StreamNodeFromJSON,
    StreamNodeFromJSONTyped,
    StreamNodeToJSON,
} from './StreamNode';

/**
 * 
 * @export
 * @interface Stream
 */
export interface Stream {
    /**
     * 
     * @type {boolean}
     * @memberof Stream
     */
    startsDownstream?: boolean;
    /**
     * 
     * @type {StreamNode}
     * @memberof Stream
     */
    flowsIntoStreamNode?: StreamNode;
    /**
     * 
     * @type {StreamNode}
     * @memberof Stream
     */
    divertsFromStreamNode?: StreamNode;
    /**
     * 
     * @type {number}
     * @memberof Stream
     */
    length?: number;
    /**
     * 
     * @type {number}
     * @memberof Stream
     */
    averageSlope?: number;
    /**
     * 
     * @type {string}
     * @memberof Stream
     */
    lengthUnits?: string;
    /**
     * 
     * @type {string}
     * @memberof Stream
     */
    slopeUnits?: string;
    /**
     * 
     * @type {string}
     * @memberof Stream
     */
    comment?: string;
    /**
     * 
     * @type {CwmsId}
     * @memberof Stream
     */
    id: CwmsId;
}

export function StreamFromJSON(json: any): Stream {
    return StreamFromJSONTyped(json, false);
}

export function StreamFromJSONTyped(json: any, ignoreDiscriminator: boolean): Stream {
    if ((json === undefined) || (json === null)) {
        return json;
    }
    return {
        
        'startsDownstream': !exists(json, 'starts-downstream') ? undefined : json['starts-downstream'],
        'flowsIntoStreamNode': !exists(json, 'flows-into-stream-node') ? undefined : StreamNodeFromJSON(json['flows-into-stream-node']),
        'divertsFromStreamNode': !exists(json, 'diverts-from-stream-node') ? undefined : StreamNodeFromJSON(json['diverts-from-stream-node']),
        'length': !exists(json, 'length') ? undefined : json['length'],
        'averageSlope': !exists(json, 'average-slope') ? undefined : json['average-slope'],
        'lengthUnits': !exists(json, 'length-units') ? undefined : json['length-units'],
        'slopeUnits': !exists(json, 'slope-units') ? undefined : json['slope-units'],
        'comment': !exists(json, 'comment') ? undefined : json['comment'],
        'id': CwmsIdFromJSON(json['id']),
    };
}

export function StreamToJSON(value?: Stream | null): any {
    if (value === undefined) {
        return undefined;
    }
    if (value === null) {
        return null;
    }
    return {
        
        'starts-downstream': value.startsDownstream,
        'flows-into-stream-node': StreamNodeToJSON(value.flowsIntoStreamNode),
        'diverts-from-stream-node': StreamNodeToJSON(value.divertsFromStreamNode),
        'length': value.length,
        'average-slope': value.averageSlope,
        'length-units': value.lengthUnits,
        'slope-units': value.slopeUnits,
        'comment': value.comment,
        'id': CwmsIdToJSON(value.id),
    };
}

