Source code for fastcs.transport.rest.util
import numpy as np
from fastcs.datatypes import Bool, DataType, Enum, Float, Int, String, T, Waveform
REST_ALLOWED_DATATYPES = (Bool, DataType, Enum, Float, Int, String)
[docs]
def convert_datatype(datatype: DataType[T]) -> type:
"""Converts a datatype to a rest serialisable type."""
match datatype:
case Waveform():
return list
case _:
return datatype.dtype
[docs]
def cast_to_rest_type(datatype: DataType[T], value: T) -> object:
"""Casts from an attribute value to a rest value."""
match datatype:
case Waveform():
return value.tolist()
case datatype if issubclass(type(datatype), REST_ALLOWED_DATATYPES):
return datatype.validate(value)
case _:
raise ValueError(f"Unsupported datatype {datatype}")
[docs]
def cast_from_rest_type(datatype: DataType[T], value: object) -> T:
"""Casts from a rest value to an attribute datatype."""
match datatype:
case Waveform():
return datatype.validate(np.array(value, dtype=datatype.array_dtype))
case datatype if issubclass(type(datatype), REST_ALLOWED_DATATYPES):
return datatype.validate(value) # type: ignore
case _:
raise ValueError(f"Unsupported datatype {datatype}")