{-# language DataKinds #-} {-| Description : Schemas for Mu microservices Definition and interpretation of schemas in the vein of Avro, Protocol Buffers, or JSON Schema. Each 'Schema' is made out of types (which in turn be records or enumerations). A value which obbeys such a schema is called a 'Term'. Conversion between Haskell types and schema types is mediated by the type classes 'ToSchema' and 'FromSchema'. -} module Mu.Schema ( -- * Schema definition Schema, Schema' , KnownName(..) , TypeDef, TypeDefB(..) , ChoiceDef(..) , FieldDef, FieldDefB(..) , FieldType, FieldTypeB(..) -- ** Lookup type in schema , (:/:) -- * Interpretation of schemas , Term(..), Field(..), FieldValue(..) , NS(..), NP(..), Proxy(..) -- * Conversion from types to schemas , WithSchema(..), unWithSchema , FromSchema(..), fromSchema' , ToSchema(..), toSchema' , CustomFieldMapping(..) , Underlying(..), UnderlyingConversion(..) -- ** Mappings between fields , Mapping(..), Mappings, MappingRight, MappingLeft -- ** Field annotations , AnnotatedSchema, AnnotationDomain, Annotation(..) ) where import Mu.Schema.Annotations import Mu.Schema.Class import Mu.Schema.Definition import Mu.Schema.Interpretation