Skip to content
/ borsh-rs Public

Rust implementation of Binary Object Representation Serializer for Hashing

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

near/borsh-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

fe78005 · Jan 13, 2025
Dec 28, 2024
Sep 28, 2023
Jan 13, 2025
Jan 13, 2025
Jun 19, 2023
Mar 13, 2020
Dec 1, 2020
Jan 13, 2025
Dec 28, 2024
Jan 13, 2025
May 19, 2020
Jan 7, 2021
Jan 13, 2025
Dec 6, 2023

Borsh in Rust   Latest Version borsh: rustc 1.67+ License Apache-2.0 badge License MIT badge

borsh-rs is Rust implementation of the Borsh binary serialization format.

Borsh stands for Binary Object Representation Serializer for Hashing. It is meant to be used in security-critical projects as it prioritizes consistency, safety, speed, and comes with a strict specification.

Example

use borsh::{BorshSerialize, BorshDeserialize, from_slice, to_vec};

#[derive(BorshSerialize, BorshDeserialize, PartialEq, Debug)]
struct A {
    x: u64,
    y: String,
}

#[test]
fn test_simple_struct() {
    let a = A {
        x: 3301,
        y: "liber primus".to_string(),
    };
    let encoded_a = to_vec(&a).unwrap();
    let decoded_a = from_slice::<A>(&encoded_a).unwrap();
    assert_eq!(a, decoded_a);
}

Docs shortcuts

Following pages are highlighted here just to give reader a chance at learning that they exist.

Advanced examples

Some of the less trivial examples are present in examples folder:

Testing

Integration tests should generally be preferred to unit ones. Root module of integration tests of borsh crate is linked here.

Releasing

The versions of all public crates in this repository are collectively managed by a single version in the workspace manifest.

So, to publish a new version of all the crates, you can do so by simply bumping that to the next "patch" version and submit a PR.

We have CI Infrastructure put in place to automate the process of publishing all crates once a version change has merged into master.

However, before you release, make sure the CHANGELOG is up to date and that the [Unreleased] section is present but empty.

License

This repository is distributed under the terms of both the MIT license and the Apache License (Version 2.0). See LICENSE-MIT and LICENSE-APACHE for details.