package b0

  1. Overview
  2. Docs

Metadata.

Typed key-value dictionaries. Values of this type are used with various B0 definitions to specify metadata.

The module defines a few standard keys and a list syntax to write metadata literals:

let meta = B0_meta.v @@ B0_meta.[
  authors, ["The project programmers"];
  homepage, "https://example.org"]

XXX. They used to be serializable, see if we don't want that again.

Keys

type 'a key

The type for keys whose lookup value is of type 'a.

module Key : sig ... end

Metadata keys

Bindings

type binding =
  1. | B : 'a key * 'a -> binding
    (*

    The type for metadata bindings.

    *)
val pp_binding : binding B00_std.Fmt.t

pp_binding formats a binding using B00_std.Fmt.field and the key's value print function.

type bindings =
  1. | [] : bindings
  2. | :: : ('a key * 'a) * bindings -> bindings

The type for sugared lists of bindings. Just because we can.

Metadata

type t

The type for metadata.

val v : bindings -> t

v bs is metadata with bindings vs. If a key is defined more than once in bs the last definition in the list takes over.

val empty : t

empty is the empty metadata.

val is_empty : t -> bool

is_empty m is true iff m is empty.

val mem : 'a key -> t -> bool

mem k m is true iff m has a binding for k.

val add : 'a key -> 'a -> t -> t

add k v m is m with k bound to v.

val tag : unit key -> t -> t

tag k m is add k () m.

val rem : 'a key -> t -> t

rem k m is m wihtout a binding for k.

val find : 'a key -> t -> 'a option

find k m is the binding of k in m (if any).

val find_binding : 'a key -> t -> binding option

find_binding k m is the binding for k in m (if any).

val find_binding_by_name : string -> t -> binding option

find_binding_by_name n m is the binding named n in m (if any).

val get : 'a key -> t -> 'a

get k m is the binding of k in m. Raises Invalid_argument if there is no such binding.

val get_binding : 'a key -> t -> binding

find_binding k m is the binding for k in m. Raises Invalid_argument if there is no such binding.

val get_binding_by_name : string -> t -> binding

get_binding_by_name n m is the binding named n in m. Raises Invalid_argument if there is no such binding.

val fold : (binding -> 'a -> 'a) -> t -> 'a -> 'a

fold f m acc folds f over the bindings of m starting with acc.

Formatting

val pp : t B00_std.Fmt.t

pp formats metadata using pp_bindings.

val pp_non_empty : t B00_std.Fmt.t

pp_non_empty is Fmt.cut followed by pp if metadata is non empty and Fmt.nop otherwise.

Standard keys

End-user information

val authors : string list key

authors describes a list of persons with authorship.

val doc_tags : string list key

doc_tags describes a list of documentation classification tags.

val homepage : string key

issues is an URI to an issue tracker.

val issues : string key

issues is an URI to an issue tracker.

val licenses : string list key

licenses describes a list of licenses. Each license should be a SPDX license identifier.

val maintainers : string list key

maintainers describe a list of persons with maintainership.

val online_doc : string key

online_doc is an URI to online documentation.

val repo : string key

repo is an URI to a VCS system.

Entity tags

val bench : unit key

bench tags benchmarking entities.

val build : unit key

build tags build system entities.

val dev : unit key

dev tags development entities.

val doc : unit key

doc tags documentation entities.

val exe : unit key

exe tags executable entities.

val test : unit key

test tags testing entities.

val lib : unit key

lib tags library entities.

Entity properties

val exe_name : string key

exe_name is an executable name without the platform specific executable extension.