Copyright | (c) Abhinav Gupta 2016 |
---|---|
License | BSD3 |
Maintainer | Abhinav Gupta <mail@abhinavg.net> |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
Language.Thrift.Parser
Contents
Description
Provides a parser for Thrift IDLs.
In addition to parsing the IDLs, the parser also keeps track of Javadoc-style docstrings on defined items and makes their values available. For example,
/** * Fetches an item. */ Item getItem()
Note that the parser does not validate the Thrift file for correctness, so, for example, you could define a string value for an int constant.
- parseFromFile :: FilePath -> IO (Either (ParseError Char Dec) (Program SourcePos))
- parse :: (Stream s, Token s ~ Char) => FilePath -> s -> Either (ParseError Char Dec) (Program SourcePos)
- thriftIDL :: (Stream s, Token s ~ Char) => Parsec Dec s (Program SourcePos)
- program :: (Stream s, Token s ~ Char) => Parser s (Program SourcePos)
- header :: (Stream s, Token s ~ Char) => Parser s (Header SourcePos)
- include :: (Stream s, Token s ~ Char) => Parser s (Include SourcePos)
- namespace :: (Stream s, Token s ~ Char) => Parser s (Namespace SourcePos)
- definition :: (Stream s, Token s ~ Char) => Parser s (Definition SourcePos)
- constant :: (Stream s, Token s ~ Char) => Parser s (Const SourcePos)
- typeDefinition :: (Stream s, Token s ~ Char) => Parser s (Type SourcePos)
- service :: (Stream s, Token s ~ Char) => Parser s (Service SourcePos)
- typedef :: (Stream s, Token s ~ Char) => Parser s (Typedef SourcePos)
- enum :: (Stream s, Token s ~ Char) => Parser s (Enum SourcePos)
- struct :: (Stream s, Token s ~ Char) => Parser s (Struct SourcePos)
- union :: (Stream s, Token s ~ Char) => Parser s (Struct SourcePos)
- exception :: (Stream s, Token s ~ Char) => Parser s (Struct SourcePos)
- senum :: (Stream s, Token s ~ Char) => Parser s (Senum SourcePos)
- typeReference :: (Stream s, Token s ~ Char) => Parser s (TypeReference SourcePos)
- constantValue :: (Stream s, Token s ~ Char) => Parser s (ConstValue SourcePos)
- docstring :: (Stream s, Token s ~ Char) => Parser s Text
- type Parser s = StateT State (Parsec Dec s)
- runParser :: Stream s => Parser s a -> Parsec Dec s a
- whiteSpace :: (Stream s, Token s ~ Char) => Parser s ()
Documentation
parseFromFile :: FilePath -> IO (Either (ParseError Char Dec) (Program SourcePos)) Source
Parses the Thrift file at the given path.
parse :: (Stream s, Token s ~ Char) => FilePath -> s -> Either (ParseError Char Dec) (Program SourcePos) Source
parse name contents
parses the contents of a Thrift document with name
name
held in contents
.
thriftIDL :: (Stream s, Token s ~ Char) => Parsec Dec s (Program SourcePos) Source
Megaparsec parser that is able to parse full Thrift documents.
Components
program :: (Stream s, Token s ~ Char) => Parser s (Program SourcePos) Source
Top-level parser to parse complete Thrift documents.
header :: (Stream s, Token s ~ Char) => Parser s (Header SourcePos) Source
Headers defined for the IDL.
include :: (Stream s, Token s ~ Char) => Parser s (Include SourcePos) Source
The IDL includes another Thrift file.
include "common.thrift" typedef common.Foo Bar
namespace :: (Stream s, Token s ~ Char) => Parser s (Namespace SourcePos) Source
Namespace directives allows control of the namespace or package name used by the generated code for certain languages.
namespace py my_service.generated
definition :: (Stream s, Token s ~ Char) => Parser s (Definition SourcePos) Source
A constant, type, or service definition.
constant :: (Stream s, Token s ~ Char) => Parser s (Const SourcePos) Source
A const
definition.
const i32 code = 1;
service :: (Stream s, Token s ~ Char) => Parser s (Service SourcePos) Source
A service.
service MyService { // ... }
typedef :: (Stream s, Token s ~ Char) => Parser s (Typedef SourcePos) Source
A typedef is just an alias for another type.
typedef common.Foo Bar
enum :: (Stream s, Token s ~ Char) => Parser s (Enum SourcePos) Source
Enums are sets of named integer values.
enum Role { User = 1, Admin
struct :: (Stream s, Token s ~ Char) => Parser s (Struct SourcePos) Source
A struct
, union
, or exception
.
struct User { 1: string name 2: Role role = Role.User; }
union Value { 1: string stringValue; 2: i32 intValue; }
exception UserDoesNotExist { 1: optional string message 2: required string username }
union :: (Stream s, Token s ~ Char) => Parser s (Struct SourcePos) Source
Deprecated: Use struct.
A union
of types.
exception :: (Stream s, Token s ~ Char) => Parser s (Struct SourcePos) Source
Deprecated: Use struct.
An exception
that can be raised by service methods.
senum :: (Stream s, Token s ~ Char) => Parser s (Senum SourcePos) Source
An string-only enum. These are a deprecated feature of Thrift and shouldn't be used.
typeReference :: (Stream s, Token s ~ Char) => Parser s (TypeReference SourcePos) Source
A reference to a built-in or defined field.
constantValue :: (Stream s, Token s ~ Char) => Parser s (ConstValue SourcePos) Source
A constant value literal.
docstring :: (Stream s, Token s ~ Char) => Parser s Text Source
A javadoc-style docstring.
/** * foo */
This parses attempts to preserve indentation inside the docstring while
getting rid of the aligned *
s (if any) and any other preceding space.