Copyright | (c) Microsoft |
---|---|
License | MIT |
Maintainer | adamsap@microsoft.com |
Stability | provisional |
Portability | portable |
Safe Haskell | None |
Language | Haskell98 |
Language.Bond.Codegen.TypeMapping
Contents
Description
This module defines abstractions for mapping from the Bond type system into the type system of a target programming language.
- data MappingContext = MappingContext {}
- data TypeMapping = TypeMapping {}
- type TypeNameBuilder = Reader MappingContext Builder
- idlTypeMapping :: TypeMapping
- cppTypeMapping :: TypeMapping
- cppCustomAllocTypeMapping :: ToText a => a -> TypeMapping
- csTypeMapping :: TypeMapping
- csCollectionInterfacesTypeMapping :: TypeMapping
- data AliasMapping = AliasMapping {}
- data Fragment
- parseAliasMapping :: String -> Either ParseError AliasMapping
- data NamespaceMapping = NamespaceMapping {}
- parseNamespaceMapping :: String -> Either ParseError NamespaceMapping
- getTypeName :: MappingContext -> Type -> Builder
- getInstanceTypeName :: MappingContext -> Type -> Builder
- getAnnotatedTypeName :: MappingContext -> Type -> Builder
- getDeclTypeName :: MappingContext -> Declaration -> Builder
- getQualifiedName :: MappingContext -> QualifiedName -> Builder
- getNamespace :: MappingContext -> QualifiedName
- getDeclNamespace :: MappingContext -> Declaration -> QualifiedName
- customAliasMapping :: MappingContext -> Declaration -> Bool
- elementTypeName :: Type -> TypeNameBuilder
- aliasTypeName :: Declaration -> [Type] -> TypeNameBuilder
- declTypeName :: Declaration -> TypeNameBuilder
- declQualifiedTypeName :: Declaration -> TypeNameBuilder
Mapping context
data MappingContext Source #
The MappingContext
encapsulates information about mapping Bond types
into types in the target language. A context instance is passed to code
generation templates.
Constructors
MappingContext | |
Fields
|
data TypeMapping Source #
A type representing a type mapping.
Constructors
TypeMapping | |
Fields
|
Type mappings
idlTypeMapping :: TypeMapping Source #
The Bond IDL type name mapping.
cppTypeMapping :: TypeMapping Source #
The default C++ type name mapping.
cppCustomAllocTypeMapping :: ToText a => a -> TypeMapping Source #
C++ type name mapping using a custom allocator.
csTypeMapping :: TypeMapping Source #
The default C# type name mapping.
csCollectionInterfacesTypeMapping :: TypeMapping Source #
C# type name mapping using interfaces rather than concrete types to represent collections.
Alias mapping
Type aliases defined in a schema can optionally be mapped to user specified types.
data AliasMapping Source #
Specification of a type alias mapping.
Constructors
AliasMapping | |
Fields
|
Specification of a fragment of type alias mappings.
Constructors
Fragment String | hardcoded string fragment |
Placeholder Int | placeholder for the n-th type argument of the type alias, applicable only to generic aliases |
parseAliasMapping :: String -> Either ParseError AliasMapping Source #
Parse a type alias mapping specification used in command-line arguments of gbc.
Examples
> parseAliasMapping "Example.OrderedSet=SortedSet<{0}>" Right (AliasMapping {aliasName = ["Example","OrderedSet"], aliasTemplate = [Fragment "SortedSet<",Placeholder 0,Fragment ">"]})
Namespace mapping
Schema namespaces can be mapped into languange-specific namespaces in the generated code.
data NamespaceMapping Source #
Specification of namespace mapping.
Constructors
NamespaceMapping | |
Fields
|
parseNamespaceMapping :: String -> Either ParseError NamespaceMapping Source #
Parse a namespace mapping specification used in command-line arguments of gbc.
Examples
> parseNamespaceMapping "bond=Microsoft.Bond" Right (NamespaceMapping {fromNamespace = ["bond"], toNamespace = ["Microsoft","Bond"]})
Name builders
getTypeName :: MappingContext -> Type -> Builder Source #
Builds the name of a Type
in the specified MappingContext
.
getInstanceTypeName :: MappingContext -> Type -> Builder Source #
Builds the name to be used when instantiating a Type
. The instance type
name may be different than the type name returned by getTypeName
when the
latter is an interface.
getAnnotatedTypeName :: MappingContext -> Type -> Builder Source #
Builds the annotated name of a Type
. The type annotations are used to
express type information about a Bond type that doesn't directly map to
the target language type system (e.g. distinction between a nullable and
non-nullable string in C# type system).
getDeclTypeName :: MappingContext -> Declaration -> Builder Source #
Builds the qualified name for a Declaration
in the specified
MappingContext
.
getQualifiedName :: MappingContext -> QualifiedName -> Builder Source #
Builds a qualified name in the specified MappingContext
.
Helper functions
getNamespace :: MappingContext -> QualifiedName Source #
Returns the namespace for the MappingContext
. The namespace may be
different than specified in the schema definition file due to
namespace mapping.
getDeclNamespace :: MappingContext -> Declaration -> QualifiedName Source #
Returns the namespace for a Declaration
in the specified MappingContext
.
customAliasMapping :: MappingContext -> Declaration -> Bool Source #
Returns True
if the alias has a custom mapping in the given
MappingContext
.
TypeMapping helper functions
elementTypeName :: Type -> TypeNameBuilder Source #
Builder for nested element types (e.g. list elements) in context of TypeNameBuilder
monad.
Used to implement mapType
function of TypeMapping
.
aliasTypeName :: Declaration -> [Type] -> TypeNameBuilder Source #
Builder for the type alias name in context of TypeNameBuilder
monad.
Used to implement mapType
function of TypeMapping
.
declTypeName :: Declaration -> TypeNameBuilder Source #
Builder for the name for a Declaration
in context of TypeNameBuilder
monad.
Used to implement mapType
function of TypeMapping
.
declQualifiedTypeName :: Declaration -> TypeNameBuilder Source #
Builder for the qualified name for a Declaration
in context of TypeNameBuilder
monad.
Used to implement mapType
function of TypeMapping
.