bond 0.4.0.1 → 0.4.0.2
raw patch · 8 files changed
+36/−20 lines, 8 filesdep +scientificdep ~Diffnew-uploaderPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: scientific
Dependency ranges changed: Diff
API changes (from Hackage documentation)
- Language.Bond.Codegen.Templates: protocolReader :: Protocol -> String
- Language.Bond.Codegen.Templates: protocolWriter :: Protocol -> String
- Language.Bond.Codegen.TypeMapping: aliasMapping :: MappingContext -> [AliasMapping]
- Language.Bond.Codegen.TypeMapping: aliasName :: AliasMapping -> QualifiedName
- Language.Bond.Codegen.TypeMapping: aliasTemplate :: AliasMapping -> [Fragment]
- Language.Bond.Codegen.TypeMapping: fromNamespace :: NamespaceMapping -> QualifiedName
- Language.Bond.Codegen.TypeMapping: namespaceMapping :: MappingContext -> [NamespaceMapping]
- Language.Bond.Codegen.TypeMapping: namespaces :: MappingContext -> [Namespace]
- Language.Bond.Codegen.TypeMapping: toNamespace :: NamespaceMapping -> QualifiedName
- Language.Bond.Codegen.TypeMapping: typeMapping :: MappingContext -> TypeMapping
- Language.Bond.Codegen.Util: instance ToText Double
- Language.Bond.Codegen.Util: instance ToText Integer
- Language.Bond.Codegen.Util: instance ToText Word16
- Language.Bond.Syntax.JSON: instance FromJSON Attribute
- Language.Bond.Syntax.JSON: instance FromJSON Bond
- Language.Bond.Syntax.JSON: instance FromJSON Constant
- Language.Bond.Syntax.JSON: instance FromJSON Constraint
- Language.Bond.Syntax.JSON: instance FromJSON Declaration
- Language.Bond.Syntax.JSON: instance FromJSON Default
- Language.Bond.Syntax.JSON: instance FromJSON Field
- Language.Bond.Syntax.JSON: instance FromJSON Import
- Language.Bond.Syntax.JSON: instance FromJSON Language
- Language.Bond.Syntax.JSON: instance FromJSON Modifier
- Language.Bond.Syntax.JSON: instance FromJSON Namespace
- Language.Bond.Syntax.JSON: instance FromJSON Type
- Language.Bond.Syntax.JSON: instance FromJSON TypeParam
- Language.Bond.Syntax.JSON: instance ToJSON Attribute
- Language.Bond.Syntax.JSON: instance ToJSON Bond
- Language.Bond.Syntax.JSON: instance ToJSON Constant
- Language.Bond.Syntax.JSON: instance ToJSON Constraint
- Language.Bond.Syntax.JSON: instance ToJSON Declaration
- Language.Bond.Syntax.JSON: instance ToJSON Default
- Language.Bond.Syntax.JSON: instance ToJSON Field
- Language.Bond.Syntax.JSON: instance ToJSON Import
- Language.Bond.Syntax.JSON: instance ToJSON Language
- Language.Bond.Syntax.JSON: instance ToJSON Modifier
- Language.Bond.Syntax.JSON: instance ToJSON Namespace
- Language.Bond.Syntax.JSON: instance ToJSON Type
- Language.Bond.Syntax.JSON: instance ToJSON TypeParam
- Language.Bond.Syntax.SchemaDef: instance ToJSON FieldDef
- Language.Bond.Syntax.SchemaDef: instance ToJSON Metadata
- Language.Bond.Syntax.SchemaDef: instance ToJSON SchemaDef
- Language.Bond.Syntax.SchemaDef: instance ToJSON StructDef
- Language.Bond.Syntax.SchemaDef: instance ToJSON TypeDef
- Language.Bond.Syntax.SchemaDef: instance ToJSON Variant
- Language.Bond.Syntax.Types: aliasType :: Declaration -> Type
- Language.Bond.Syntax.Types: attrName :: Attribute -> QualifiedName
- Language.Bond.Syntax.Types: attrValue :: Attribute -> String
- Language.Bond.Syntax.Types: bondDeclarations :: Bond -> [Declaration]
- Language.Bond.Syntax.Types: bondImports :: Bond -> [Import]
- Language.Bond.Syntax.Types: bondNamespaces :: Bond -> [Namespace]
- Language.Bond.Syntax.Types: constantName :: Constant -> String
- Language.Bond.Syntax.Types: constantValue :: Constant -> Maybe Int
- Language.Bond.Syntax.Types: declAttributes :: Declaration -> [Attribute]
- Language.Bond.Syntax.Types: declName :: Declaration -> String
- Language.Bond.Syntax.Types: declNamespaces :: Declaration -> [Namespace]
- Language.Bond.Syntax.Types: declParams :: Declaration -> [TypeParam]
- Language.Bond.Syntax.Types: enumConstants :: Declaration -> [Constant]
- Language.Bond.Syntax.Types: fieldAttributes :: Field -> [Attribute]
- Language.Bond.Syntax.Types: fieldDefault :: Field -> Maybe Default
- Language.Bond.Syntax.Types: fieldModifier :: Field -> Modifier
- Language.Bond.Syntax.Types: fieldName :: Field -> String
- Language.Bond.Syntax.Types: fieldOrdinal :: Field -> Word16
- Language.Bond.Syntax.Types: fieldType :: Field -> Type
- Language.Bond.Syntax.Types: instance Eq Attribute
- Language.Bond.Syntax.Types: instance Eq Bond
- Language.Bond.Syntax.Types: instance Eq Constant
- Language.Bond.Syntax.Types: instance Eq Constraint
- Language.Bond.Syntax.Types: instance Eq Declaration
- Language.Bond.Syntax.Types: instance Eq Default
- Language.Bond.Syntax.Types: instance Eq Field
- Language.Bond.Syntax.Types: instance Eq Import
- Language.Bond.Syntax.Types: instance Eq Language
- Language.Bond.Syntax.Types: instance Eq Modifier
- Language.Bond.Syntax.Types: instance Eq Namespace
- Language.Bond.Syntax.Types: instance Eq Type
- Language.Bond.Syntax.Types: instance Eq TypeParam
- Language.Bond.Syntax.Types: instance Show Attribute
- Language.Bond.Syntax.Types: instance Show Bond
- Language.Bond.Syntax.Types: instance Show Constant
- Language.Bond.Syntax.Types: instance Show Constraint
- Language.Bond.Syntax.Types: instance Show Declaration
- Language.Bond.Syntax.Types: instance Show Default
- Language.Bond.Syntax.Types: instance Show Field
- Language.Bond.Syntax.Types: instance Show Import
- Language.Bond.Syntax.Types: instance Show Language
- Language.Bond.Syntax.Types: instance Show Modifier
- Language.Bond.Syntax.Types: instance Show Namespace
- Language.Bond.Syntax.Types: instance Show Type
- Language.Bond.Syntax.Types: instance Show TypeParam
- Language.Bond.Syntax.Types: nsLanguage :: Namespace -> Maybe Language
- Language.Bond.Syntax.Types: nsName :: Namespace -> QualifiedName
- Language.Bond.Syntax.Types: paramConstraint :: TypeParam -> Maybe Constraint
- Language.Bond.Syntax.Types: paramName :: TypeParam -> String
- Language.Bond.Syntax.Types: structBase :: Declaration -> Maybe Type
- Language.Bond.Syntax.Types: structFields :: Declaration -> [Field]
+ Language.Bond.Codegen.Templates: [protocolReader] :: Protocol -> String
+ Language.Bond.Codegen.Templates: [protocolWriter] :: Protocol -> String
+ Language.Bond.Codegen.TypeMapping: [aliasMapping] :: MappingContext -> [AliasMapping]
+ Language.Bond.Codegen.TypeMapping: [aliasName] :: AliasMapping -> QualifiedName
+ Language.Bond.Codegen.TypeMapping: [aliasTemplate] :: AliasMapping -> [Fragment]
+ Language.Bond.Codegen.TypeMapping: [fromNamespace] :: NamespaceMapping -> QualifiedName
+ Language.Bond.Codegen.TypeMapping: [namespaceMapping] :: MappingContext -> [NamespaceMapping]
+ Language.Bond.Codegen.TypeMapping: [namespaces] :: MappingContext -> [Namespace]
+ Language.Bond.Codegen.TypeMapping: [toNamespace] :: NamespaceMapping -> QualifiedName
+ Language.Bond.Codegen.TypeMapping: [typeMapping] :: MappingContext -> TypeMapping
+ Language.Bond.Codegen.Util: instance Text.Shakespeare.Text.ToText GHC.Integer.Type.Integer
+ Language.Bond.Codegen.Util: instance Text.Shakespeare.Text.ToText GHC.Types.Double
+ Language.Bond.Codegen.Util: instance Text.Shakespeare.Text.ToText GHC.Word.Word16
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.FromJSON Language.Bond.Syntax.Types.Attribute
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.FromJSON Language.Bond.Syntax.Types.Bond
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.FromJSON Language.Bond.Syntax.Types.Constant
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.FromJSON Language.Bond.Syntax.Types.Constraint
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.FromJSON Language.Bond.Syntax.Types.Declaration
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.FromJSON Language.Bond.Syntax.Types.Default
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.FromJSON Language.Bond.Syntax.Types.Field
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.FromJSON Language.Bond.Syntax.Types.Import
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.FromJSON Language.Bond.Syntax.Types.Language
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.FromJSON Language.Bond.Syntax.Types.Modifier
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.FromJSON Language.Bond.Syntax.Types.Namespace
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.FromJSON Language.Bond.Syntax.Types.Type
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.FromJSON Language.Bond.Syntax.Types.TypeParam
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.Types.Attribute
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.Types.Bond
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.Types.Constant
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.Types.Constraint
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.Types.Declaration
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.Types.Default
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.Types.Field
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.Types.Import
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.Types.Language
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.Types.Modifier
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.Types.Namespace
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.Types.Type
+ Language.Bond.Syntax.JSON: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.Types.TypeParam
+ Language.Bond.Syntax.SchemaDef: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.SchemaDef.FieldDef
+ Language.Bond.Syntax.SchemaDef: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.SchemaDef.Metadata
+ Language.Bond.Syntax.SchemaDef: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.SchemaDef.SchemaDef
+ Language.Bond.Syntax.SchemaDef: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.SchemaDef.StructDef
+ Language.Bond.Syntax.SchemaDef: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.SchemaDef.TypeDef
+ Language.Bond.Syntax.SchemaDef: instance Data.Aeson.Types.Class.ToJSON Language.Bond.Syntax.SchemaDef.Variant
+ Language.Bond.Syntax.Types: [aliasType] :: Declaration -> Type
+ Language.Bond.Syntax.Types: [attrName] :: Attribute -> QualifiedName
+ Language.Bond.Syntax.Types: [attrValue] :: Attribute -> String
+ Language.Bond.Syntax.Types: [bondDeclarations] :: Bond -> [Declaration]
+ Language.Bond.Syntax.Types: [bondImports] :: Bond -> [Import]
+ Language.Bond.Syntax.Types: [bondNamespaces] :: Bond -> [Namespace]
+ Language.Bond.Syntax.Types: [constantName] :: Constant -> String
+ Language.Bond.Syntax.Types: [constantValue] :: Constant -> Maybe Int
+ Language.Bond.Syntax.Types: [declAttributes] :: Declaration -> [Attribute]
+ Language.Bond.Syntax.Types: [declName] :: Declaration -> String
+ Language.Bond.Syntax.Types: [declNamespaces] :: Declaration -> [Namespace]
+ Language.Bond.Syntax.Types: [declParams] :: Declaration -> [TypeParam]
+ Language.Bond.Syntax.Types: [enumConstants] :: Declaration -> [Constant]
+ Language.Bond.Syntax.Types: [fieldAttributes] :: Field -> [Attribute]
+ Language.Bond.Syntax.Types: [fieldDefault] :: Field -> Maybe Default
+ Language.Bond.Syntax.Types: [fieldModifier] :: Field -> Modifier
+ Language.Bond.Syntax.Types: [fieldName] :: Field -> String
+ Language.Bond.Syntax.Types: [fieldOrdinal] :: Field -> Word16
+ Language.Bond.Syntax.Types: [fieldType] :: Field -> Type
+ Language.Bond.Syntax.Types: [nsLanguage] :: Namespace -> Maybe Language
+ Language.Bond.Syntax.Types: [nsName] :: Namespace -> QualifiedName
+ Language.Bond.Syntax.Types: [paramConstraint] :: TypeParam -> Maybe Constraint
+ Language.Bond.Syntax.Types: [paramName] :: TypeParam -> String
+ Language.Bond.Syntax.Types: [structBase] :: Declaration -> Maybe Type
+ Language.Bond.Syntax.Types: [structFields] :: Declaration -> [Field]
+ Language.Bond.Syntax.Types: instance GHC.Classes.Eq Language.Bond.Syntax.Types.Attribute
+ Language.Bond.Syntax.Types: instance GHC.Classes.Eq Language.Bond.Syntax.Types.Bond
+ Language.Bond.Syntax.Types: instance GHC.Classes.Eq Language.Bond.Syntax.Types.Constant
+ Language.Bond.Syntax.Types: instance GHC.Classes.Eq Language.Bond.Syntax.Types.Constraint
+ Language.Bond.Syntax.Types: instance GHC.Classes.Eq Language.Bond.Syntax.Types.Declaration
+ Language.Bond.Syntax.Types: instance GHC.Classes.Eq Language.Bond.Syntax.Types.Default
+ Language.Bond.Syntax.Types: instance GHC.Classes.Eq Language.Bond.Syntax.Types.Field
+ Language.Bond.Syntax.Types: instance GHC.Classes.Eq Language.Bond.Syntax.Types.Import
+ Language.Bond.Syntax.Types: instance GHC.Classes.Eq Language.Bond.Syntax.Types.Language
+ Language.Bond.Syntax.Types: instance GHC.Classes.Eq Language.Bond.Syntax.Types.Modifier
+ Language.Bond.Syntax.Types: instance GHC.Classes.Eq Language.Bond.Syntax.Types.Namespace
+ Language.Bond.Syntax.Types: instance GHC.Classes.Eq Language.Bond.Syntax.Types.Type
+ Language.Bond.Syntax.Types: instance GHC.Classes.Eq Language.Bond.Syntax.Types.TypeParam
+ Language.Bond.Syntax.Types: instance GHC.Show.Show Language.Bond.Syntax.Types.Attribute
+ Language.Bond.Syntax.Types: instance GHC.Show.Show Language.Bond.Syntax.Types.Bond
+ Language.Bond.Syntax.Types: instance GHC.Show.Show Language.Bond.Syntax.Types.Constant
+ Language.Bond.Syntax.Types: instance GHC.Show.Show Language.Bond.Syntax.Types.Constraint
+ Language.Bond.Syntax.Types: instance GHC.Show.Show Language.Bond.Syntax.Types.Declaration
+ Language.Bond.Syntax.Types: instance GHC.Show.Show Language.Bond.Syntax.Types.Default
+ Language.Bond.Syntax.Types: instance GHC.Show.Show Language.Bond.Syntax.Types.Field
+ Language.Bond.Syntax.Types: instance GHC.Show.Show Language.Bond.Syntax.Types.Import
+ Language.Bond.Syntax.Types: instance GHC.Show.Show Language.Bond.Syntax.Types.Language
+ Language.Bond.Syntax.Types: instance GHC.Show.Show Language.Bond.Syntax.Types.Modifier
+ Language.Bond.Syntax.Types: instance GHC.Show.Show Language.Bond.Syntax.Types.Namespace
+ Language.Bond.Syntax.Types: instance GHC.Show.Show Language.Bond.Syntax.Types.Type
+ Language.Bond.Syntax.Types: instance GHC.Show.Show Language.Bond.Syntax.Types.TypeParam
- Language.Bond.Parser: type ImportResolver = FilePath -> FilePath -> IO (FilePath, String)
+ Language.Bond.Parser: type ImportResolver = FilePath path of the file containing the <https://microsoft.github.io/bond/manual/compiler.html#import-statements import statement>
-> FilePath (usually relative) path of the imported file
-> IO (FilePath, String) the resolver function returns the resolved path of the imported file and its content
- Language.Bond.Syntax.Util: foldMapFields :: Monoid m => (Field -> m) -> Type -> m
+ Language.Bond.Syntax.Util: foldMapFields :: (Monoid m) => (Field -> m) -> Type -> m
- Language.Bond.Syntax.Util: foldMapType :: Monoid m => (Type -> m) -> Type -> m
+ Language.Bond.Syntax.Util: foldMapType :: (Monoid m) => (Type -> m) -> Type -> m
- Language.Bond.Util: optional :: Monoid m => (a -> m) -> Maybe a -> m
+ Language.Bond.Util: optional :: (Monoid m) => (a -> m) -> Maybe a -> m
Files
- bond.cabal +5/−3
- src/Language/Bond/Codegen/Cpp/Util.hs +2/−3
- src/Language/Bond/Codegen/Cs/Types_cs.hs +2/−1
- src/Language/Bond/Codegen/Cs/Util.hs +7/−0
- src/Language/Bond/Codegen/CustomMapping.hs +1/−1
- src/Language/Bond/Codegen/TypeMapping.hs +6/−6
- src/Language/Bond/Parser.hs +12/−5
- src/Language/Bond/Syntax/SchemaDef.hs +1/−1
bond.cabal view
@@ -2,8 +2,9 @@ -- Licensed under the MIT license. See LICENSE file in the project root for full license information. name: bond -version: 0.4.0.1 +version: 0.4.0.2 cabal-version: >= 1.8 +tested-with: GHC>=7.4.1 synopsis: Bond schema compiler and code generator description: Bond is a cross-platform framework for handling schematized data. It supports cross-language de/serialization and @@ -27,7 +28,7 @@ maintainer: Adam Sapek <adamsap@microsoft.com> bug-reports: https://github.com/Microsoft/bond/issues copyright: Copyright (c) Microsoft. All rights reserved. -category: Language +category: Language, Compiler, Code Generation build-type: Simple source-repository head @@ -42,6 +43,7 @@ filepath >= 1.0, mtl >= 2.1, parsec >= 3.1, + scientific >= 0.3.4.6, shakespeare >= 2.0, text >= 0.11 ghc-options: -Wall @@ -88,7 +90,7 @@ derive, HUnit, QuickCheck, - Diff >= 0.2 && < 0.4, + Diff >= 0.2 && <= 0.3.2, pretty, tasty, tasty-golden,
src/Language/Bond/Codegen/Cpp/Util.hs view
@@ -139,7 +139,6 @@ };|] where constant Constant {..} = [lt|#{constantName}#{optional value constantValue}|] - value (-2147483648) = [lt| = -2147483647-1|] - value x = [lt| = #{x}|] + value (-2147483648) = [lt| = static_cast<int32_t>(-2147483647-1)|] + value x = [lt| = static_cast<int32_t>(#{x})|] enumDefinition _ = error "enumDefinition: impossible happened." -
src/Language/Bond/Codegen/Cs/Types_cs.hs view
@@ -40,6 +40,7 @@ -> FieldMapping -- ^ Specifies how to represent schema fields -> MappingContext -> String -> [Import] -> [Declaration] -> (String, Text) types_cs structMapping fieldMapping cs _ _ declarations = (fileSuffix, [lt| +#{CS.disableCscWarnings} #{CS.disableReSharperWarnings} namespace #{csNamespace} { @@ -139,7 +140,7 @@ }|] where -- constant - constant Constant {..} = let value x = [lt| = #{x}|] in + constant Constant {..} = let value x = [lt| = unchecked((int)#{x})|] in [lt|#{constantName}#{optional value constantValue},|] typeDefinition _ = mempty
src/Language/Bond/Codegen/Cs/Util.hs view
@@ -9,6 +9,7 @@ , schemaAttributes , paramConstraints , defaultValue + , disableCscWarnings , disableReSharperWarnings ) where @@ -23,6 +24,12 @@ import Language.Bond.Syntax.Util import Language.Bond.Codegen.TypeMapping import Language.Bond.Codegen.Util + +disableCscWarnings :: Text +disableCscWarnings = [lt| +// suppress "Missing XML comment for publicly visible type or member" +#pragma warning disable 1591 +|] disableReSharperWarnings :: Text disableReSharperWarnings = [lt|
src/Language/Bond/Codegen/CustomMapping.hs view
@@ -25,7 +25,7 @@ -- | Specification of a type alias mapping. data AliasMapping = AliasMapping { aliasName :: QualifiedName -- ^ qualified name of a type alias - , aliasTemplate :: [Fragment] -- ^ list of fragments comprising custom mapping for the alias + , aliasTemplate :: [Fragment] -- ^ list of fragments comprising the custom mapping for the alias } -- | Specification of namespace mapping.
src/Language/Bond/Codegen/TypeMapping.hs view
@@ -10,8 +10,8 @@ Stability : provisional Portability : portable -The module defines abstractions for mapping from the Bond type system into the -type systems of a target programming language. +This module defines abstractions for mapping from the Bond type system into the +type system of a target programming language. -} module Language.Bond.Codegen.TypeMapping @@ -65,8 +65,8 @@ import Language.Bond.Codegen.CustomMapping -- | The 'MappingContext' encapsulates information about mapping Bond types --- into types of code generation target language. A context instance is passed --- to code generation templates. +-- into types in the target language. A context instance is passed to code +-- generation templates. data MappingContext = MappingContext { typeMapping :: TypeMapping , aliasMapping :: [AliasMapping] @@ -74,7 +74,7 @@ , namespaces :: [Namespace] } --- | An opaque type representing type mapping. +-- | An opaque type representing a type mapping. data TypeMapping = TypeMapping { language :: Maybe Language , global :: Builder @@ -89,7 +89,7 @@ type TypeNameBuilder = Reader MappingContext Builder -- | Returns the namespace for the 'MappingContext'. The namespace may be --- different than specified in schema definition file due to +-- different than specified in the schema definition file due to -- <#namespace-mapping namespace mapping>. getNamespace :: MappingContext -> QualifiedName getNamespace c@MappingContext {..} = resolveNamespace c namespaces
src/Language/Bond/Parser.hs view
@@ -24,6 +24,7 @@ import Data.Ord import Data.List import Data.Function +import Data.Word import Control.Applicative import Control.Monad.Reader import Prelude @@ -233,12 +234,12 @@ with params e = e { currentParams = params } unique p = do fields' <- p - case findDuplicates fields' of + case findDuplicatesBy fieldOrdinal fields' ++ findDuplicatesBy fieldName fields' of [] -> return fields' - Field {..}:_ -> fail $ "Duplicate definition of the field with ordinal " ++ show fieldOrdinal + Field {..}:_ -> fail $ "Duplicate definition of the field with ordinal " ++ show fieldOrdinal ++ + " and name " ++ show fieldName where - findDuplicates xs = deleteFirstsBy ordinal xs (nubBy ordinal xs) - ordinal = (==) `on` fieldOrdinal + findDuplicatesBy accessor xs = deleteFirstsBy ((==) `on` accessor) xs (nubBy ((==) `on` accessor) xs) manySortedBy :: (a -> a -> Ordering) -> ParsecT s u m a -> ParsecT s u m [a] manySortedBy = manyAccum . insertBy @@ -247,7 +248,13 @@ field :: Parser Field field = makeField <$> attributes <*> ordinal <*> modifier <*> ftype <*> identifier <*> optional default_ where - ordinal = (fromIntegral <$> integer) <* colon <?> "field ordinal" + ordinal = word16 <* colon <?> "field ordinal" + where + word16 = do + i <- integer + if i <= toInteger (maxBound :: Word16) && i >= toInteger (minBound :: Word16) + then return (fromInteger i) + else fail "Field ordinal must be within the range 0-65535" modifier = option Optional (keyword "optional" *> pure Optional <|> keyword "required" *> pure Required
src/Language/Bond/Syntax/SchemaDef.hs view
@@ -36,7 +36,7 @@ import Language.Bond.Codegen.TypeMapping -- | Returns an instance of <https://microsoft.github.io/bond/manual/compiler.html#runtime-schema SchemaDef> --- for the specified type. The SchemaDef is encoded using Bond Simple JSON +-- for the specified type. The SchemaDef is encoded using the Bond Simple JSON -- protocol and returned as a lazy 'BL.ByteString'. encodeSchemaDef :: Type -> BL.ByteString encodeSchemaDef = encode . makeSchemaDef