On this page:
type-info
primitive-info
enum-info
prop: protobuf
protobuf?
protobuf-ref
message-info
field-info
message
Version: 5.2.1

1 Reflection

 (require (planet murphy/protobuf/reflection))
Generic functionality for protocol buffer data and types.

(struct type-info (name)
  #:transparent)
  name : symbol?
Common base of protocol buffer type information records.

(struct primitive-info type-info (type reader writer))
  type : type/c
  reader : (-> input-port? any/c)
  writer : (-> any/c output-port? any)
Information about a primitive protocol buffer type. The type indicates the wire type of the primitive as used by read-tag/type and write-tag/type.

The reader and writer are responsible for (de-)serialization of values of this type.

(struct enum-info type-info (integer->enum enum->integer))
  integer->enum : (-> exact-integer? any/c)
  enum->integer : (-> any/c exact-integer?)
Information about a user defined protocol buffer enumeration type.

The integer->enum and enum->integer conversions are responsible to make the Racket representation of the enumeration compatible with (de-)serialization using read-int* and write-int*.

The define-enum-type syntax can be used to synthesize conversion procedures between symbols and integers as well as an instance of this structure type.

prop:protobuf : struct-type-property?
(protobuf? v)  boolean?
  v : any/c
(protobuf-ref v [default])  any/c
  v : any/c
  default : any/c = ...
This property is used to attach a promise of a message-info structure to the structure type corresponding to a protocol buffer message type.

The procedure protobuf? checks for the presence of the property on a structure type or instance; protobuf-ref extracts the value of the property.

(struct message-info type-info (constructor fields required))
  constructor : (-> any/c)
  fields : (hash/c exact-nonnegative-integer? field?)
  required : (set/c exact-nonnegative-integer?)
Information about a user defined protocol buffer message type.

The constructor is used to obtain fresh instances of the structure type representing the message type which have all fields initialized to the default value (void) for missing fields.

The hash fields maps wire tags to field descriptors, the set required indicates which wire tags must be present in a valid message.

The define-message-type syntax can be used to synthesize a structure type and an instance of this descriptor type.

(struct field-info (type repeated? packed? accessor mutator))
  type : (or/c primitive-info? enum-info? struct-type?)
  repeated? : any/c
  packed? : any/c
  accessor : (->* (any/c) (any/c) any/c)
  mutator : (-> any/c any/c any)
Information about a field in a user defined protocol buffer message. The type of the field can contain primitive protocol buffer type information, enumeration type information or a record type with associated message type information.

Iff the field can be present any number of times, repeated? should be true; packed? may be true for repeated fields of non-length-delimited primitive types to specify a more efficient wire format.

The accessor and mutator are used to extract and modify the values of the field in instances of the message structure.

(struct message (extensions unknown)
  #:mutable
  #:transparent)
  extensions : (hash/c exact-nonnegative-integer? any/c)
  unknown : bytes?
The common base of all protocol buffer message types. While regular fields of a message are stored in fields of message’s subtypes, known extensions are stored in the extensions hash under their field tags. Fields with unknown tags are copied verbatim to or from the unknown byte string.