Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
asn.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
(* Copyright (c) 2014-2017 David Kaloper Meršinjak. All rights reserved. See LICENSE.md. *) open Result module Core = Asn_core module OID = Asn_oid exception Ambiguous_syntax = Core.Ambiguous_syntax type error = Core.error let pp_error = Core.pp_error module S = struct type 'a t = 'a Core.asn type 'a element = 'a Core.element type 'a sequence = 'a Core.sequence include Asn_combinators let (error, parse_error) = Core.(error, parse_error) end type 'a t = 'a S.t type oid = OID.t type encoding = { mk_decoder : 'a. 'a t -> Cstruct.t -> 'a * Cstruct.t; mk_encoder : 'a. 'a t -> 'a -> Asn_writer.t } let ber = { mk_decoder = Asn_ber_der.R.compile_ber ; mk_encoder = Asn_ber_der.W.ber_to_writer ; } let der = { mk_decoder = Asn_ber_der.R.compile_der ; mk_encoder = Asn_ber_der.W.der_to_writer ; } type 'a codec = Codec of (Cstruct.t -> ('a * Cstruct.t)) * ('a -> Asn_writer.t) let codec { mk_encoder ; mk_decoder } asn = let () = Core.validate asn in Codec (mk_decoder asn, mk_encoder asn) let encode (Codec (_, enc)) a = Asn_writer.to_cstruct (enc a) let encode_into (Codec (_, enc)) a = Asn_writer.to_writer (enc a) let decode (Codec (dec, _)) b = try Ok (dec b) with Core.Parse_error err -> Error err let random = Asn_random.r_asn