5 releases

0.2.2 Mar 8, 2022
0.2.1 Mar 7, 2022
0.2.0 Mar 4, 2022
0.1.1 Mar 3, 2022
0.1.0 Mar 1, 2022

#2561 in Development tools

45 downloads per month
Used in 8 crates (6 directly)

Apache-2.0

2.5MB
9K SLoC

Contains (Zip file, 510KB) TestingTypes-1_9_0-sdk_1_18_1-lf_1_14.dar, (Zip file, 415KB) TestingTypes-1_0_0-sdk_0_13_36-lf_1_6.dar, (Zip file, 380KB) TestingTypes-1_0_0-sdk_0_13_37-lf_1_7.dar, (Zip file, 355KB) TestingTypes-1_0_0-sdk_0_13_55-lf_1_8.dar, (Zip file, 365KB) TestingTypes-1_0_0-sdk_1_0_0-lf_1_8.dar, (Zip file, 355KB) TestingTypes-1_0_0-sdk_1_0_1-lf_1_8.dar and 1 more.

Documentation Crate maintenance-status

Daml LF

This crate provides a library for working with Daml-LF packages.

This crate should not be used directly, instead you should depend on the daml crate and enable the lf or lf-full features:

[dependencies]
daml = { version = "0.2.2", features = [ "lf" ] }

License

daml-lf is distributed under the terms of the Apache License (Version 2.0).

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in time by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

See LICENSE for details.

Copyright 2022


lib.rs:

A library for working with Daml-LF.

Compiled Daml packages are represented as Daml-LF ( aka "Ledger Fragment") archives. An archive is a protobuf serialized bytes array which is typically stored in a dalf file. Multiple dalf archives can be combined along with a manifest file into a Dar ("Daml Archive") file.

Elements

The element module contains a higher level representation of all Daml-LF types and provide several convenience methods to simplify working with Daml-LF types over the raw types generated from the protobuf definitions.

These types are typically constructed by converting an existing DarFile, DamlLfArchive or DamlLfArchivePayload which can be loaded from a file or downloaded from a Daml ledger.

In the following example the example.dar is loaded from a file, converted to a DamlArchive and finally the id of the main package is extracted:

let dar = DarFile::from_file("Example.dar")?;
let package_id = dar.apply(|archive| archive.main_package_id().to_owned())?;

Interning

Interned data is automatically managed by the element items. During conversion all element items borrow interned data from the underlying source and so no additional allocations are required per element.

However if an owned (i.e. bounded by 'static) version is required, such as to pass to a thread or an async executors, the method DarFile::to_owned_archive is provided to perform this conversion and allocate separate copies of all interned data per element as required.

The following example loads Example.dar from a file, converts it to an owned DamlArchive that is suitable to be passed to a new thread:

let archive = DarFile::from_file("Example.dar")?.to_owned_archive()?;
thread::spawn(move || {
    dbg!(archive.name());
})

Features

The following features are defined:

  • default Includes all Daml-LF types except Daml expressions.
  • full Includes all Daml-LF types.

Downloading Daml Packages

Serialized Daml-LF archives may also be retrieved from an existing ledger via the GetPackage method of the GRPC package_service (see here). The daml-grpc create provides an implementation of this service in the daml_package_service module.

The daml-util crate provides the DamlPackages helper to simplify downloading of packages form a Daml ledger and converting to a DarFile or collections of DamlLfArchive or DamlLfArchivePayload.

Versions

This library supports all Daml-LF LanguageVersion from LanguageVersion::V1_0 up to LanguageVersion::V1_14.

Dependencies

~2.2–4.5MB
~83K SLoC