/**
 * Shell EVLib
 *
 * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
 */

import { oneOf, Schema, validateAndMap } from '../../schema';
import {
  MultiLocationMarker,
  multiLocationMarkerSchema,
} from '../multiLocationMarker';
import {
  SingleLocationMarker,
  singleLocationMarkerSchema,
} from '../singleLocationMarker';

/** This is a container type for one-of types. */
export type LocationMarker = SingleLocationMarker | MultiLocationMarker;

const discriminatorMap = {
  'SingleLocation': singleLocationMarkerSchema,
  'MultiLocation': multiLocationMarkerSchema,
};

export const locationMarkerSchema: Schema<LocationMarker> = oneOf(
  [singleLocationMarkerSchema, multiLocationMarkerSchema],
  discriminatorMap,
  'markerType'
);

export namespace LocationMarker {
  /**
   * Validation method to narrow down union type to SingleLocationMarker type case.
   *
   * This is SingleLocationMarker case.
   */
  export function isSingleLocationMarker(
    value: unknown
  ): value is SingleLocationMarker {
    const validationResult = validateAndMap(value, singleLocationMarkerSchema);
    return validationResult.errors === false;
  }

  /**
   * Validation method to narrow down union type to MultiLocationMarker type case.
   *
   * This is MultiLocationMarker case.
   */
  export function isMultiLocationMarker(
    value: unknown
  ): value is MultiLocationMarker {
    const validationResult = validateAndMap(value, multiLocationMarkerSchema);
    return validationResult.errors === false;
  }
}
