mirror of
https://github.com/valitydev/thrift.git
synced 2024-11-07 18:58:51 +00:00
fa6eaca762
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@1001830 13f79535-47bb-0310-9956-ffa450edef68
90 lines
2.4 KiB
Plaintext
90 lines
2.4 KiB
Plaintext
Haskell Thrift Bindings
|
|
|
|
License
|
|
=======
|
|
|
|
Licensed to the Apache Software Foundation (ASF) under one
|
|
or more contributor license agreements. See the NOTICE file
|
|
distributed with this work for additional information
|
|
regarding copyright ownership. The ASF licenses this file
|
|
to you under the Apache License, Version 2.0 (the
|
|
"License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing,
|
|
software distributed under the License is distributed on an
|
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
KIND, either express or implied. See the License for the
|
|
specific language governing permissions and limitations
|
|
under the License.
|
|
|
|
Compile
|
|
=======
|
|
|
|
Use Cabal to compile and install; ./configure uses Cabal underneath, and that
|
|
path is not yet well tested. Thrift's library and generated code should compile
|
|
with pretty much any GHC extensions or warnings you enable (or disable).
|
|
Please report this not being the case as a bug on
|
|
https://issues.apache.org/jira/secure/CreateIssue!default.jspa
|
|
|
|
Chances you'll need to muck a bit with Cabal flags to install Thrift:
|
|
|
|
CABAL_CONFIGURE_FLAGS="--user" ./configure
|
|
|
|
Base Types
|
|
==========
|
|
|
|
The mapping from Thrift types to Haskell's is:
|
|
|
|
* double -> Double
|
|
* i8 -> Data.Word.Word8
|
|
* i16 -> Data.Int.Int16
|
|
* i32 -> Data.Int.Int32
|
|
* i64 -> Data.Int.Int64
|
|
* string -> String
|
|
* binary -> Data.ByteString.Lazy
|
|
* bool -> Boolean
|
|
|
|
Enums
|
|
=====
|
|
|
|
Become Haskell 'data' types. Use fromEnum to get out the int value.
|
|
|
|
Structs
|
|
=======
|
|
|
|
Become records. Field labels are ugly, of the form f_STRUCTNAME_FIELDNAME. All
|
|
fields are Maybe types.
|
|
|
|
Exceptions
|
|
==========
|
|
|
|
Identical to structs. Throw them with throwDyn. Catch them with catchDyn.
|
|
|
|
Client
|
|
======
|
|
|
|
Just a bunch of functions. You may have to import a bunch of client files to
|
|
deal with inheritance.
|
|
|
|
Interface
|
|
=========
|
|
|
|
You should only have to import the last one in the chain of inheritors. To make
|
|
an interface, declare a label:
|
|
|
|
data MyIface = MyIface
|
|
|
|
and then declare it an instance of each iface class, starting with the superest
|
|
class and proceding down (all the while defining the methods). Then pass your
|
|
label to process as the handler.
|
|
|
|
Processor
|
|
=========
|
|
|
|
Just a function that takes a handler label, protocols. It calls the
|
|
superclasses process if there is a superclass.
|
|
|