[erlang-questions] Erlang de/serializer and data type validator

Ulf Wiger <>
Tue Aug 2 11:23:16 CEST 2011


Hi Motiejus,

Perhaps you should look into Joe Norton's work with UBF?

UBF is a type system for describing contracts between services.

http://www.sics.se/~joe/ubf/site/home.html (for original documentation)

https://github.com/norton/ubf (for the current stuff)

There is a UBF-to-JSON converter. There is also one for Thrift, and Joe Norton has combined UBF, UBF-JSON and QuickCheck to do validation of web services.

I don't think UBF to XML would be particularly difficult.

There may be some more work that needs to be done before it fits your problem. OTOH, you might get a lot of other benefits going this route.

BR,
Ulf W

On 2 Aug 2011, at 10:27, Motiejus Jakštys wrote:

> Hello,
> 
> I have a data structure validator. It should check if variable has
> a pre-defined data structure.
> 
> The validator takes Erlang data type (in this example, #'bp.message'{})
> and checks if:
> 1) to is either {participant | bpid, binary() | undefined}
> 2) module either se_port_v2 or se_transfer_v2
> 
> Part of validator schema:
> 
> schema('bp.message') ->
>    {record, 'bp.message', [
>        {to, schema('bp.message.destination')}
>        {module, schema('bp.message.module')},
>    ]};
> 
> schema('bp.message.destination') ->
>    {tuple, {choice, ['participant', 'bpid']}, {choice, ['binary', undefined]}};
> 
> schema('bp.message.module') ->
>    {choice, [
>        se_assign_v2,
>        se_release_v2,
>    ]};
> 
> Two questions:
> 1) I feel I could do the same with erlang -type. How do I check the data
> structure complies?
> 2) I need serializer and deserializer to JSON, XML or any other common
> data format. Maybe there is such a thing in the wild?
> 
> Serialized structure must not hold Erlang data type information as I
> have to share it with third parties. It should distinguish between atom
> and binary from schema (as well as list from tuple..). Serialized message
> to JSON would look like this:
> 
> { "bp.message" : {
>    "to" : [participant, "yadda"],
>    "module" : "se_assign_v2"
>     }
> }
> 
> If I will have to write one, how do I recursively crawl type definition
> information?
> 
> Motiejus
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions

Ulf Wiger, CTO, Erlang Solutions, Ltd.
http://erlang-solutions.com



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20110802/4209b799/attachment.html>


More information about the erlang-questions mailing list