MoonLoom is a self-describing content-addressing toolkit for MoonBit.
Dependencies
moon add ggbond44439/moonloom@0.1.1import {
"ggbond44439/moonloom" @moonloom,
}let text = @moonloom.multibase_encode(@moonloom.Base32, b"hello")
assert_eq(text, Ok("bnbswy3dp"))
let provider = @moonloom.sha2_provider()
let cid = match @moonloom.cid_from_content(
@moonloom.RAW_CODEC,
@moonloom.Sha2_256,
b"hello",
provider,
@moonloom.Limits::default(),
) {
Ok(value) => value
Err(err) => fail(err.to_string())
}
assert_eq(
cid.to_text(),
Ok("bafkreibm6jg3ux5qumhcn2b3flc3tyu6dmlb4xa7u5bf44yegnrjhc4yeq"),
)
assert_eq(
cid.verify(b"hello", provider, @moonloom.Limits::default()),
Ok(()),
)moonloom --help
moonloom version
moonloom multibase encode [--base <name>] <text>
moonloom multibase decode <multibase-text>
moonloom multihash digest [--algorithm sha2-256|sha2-512] <text>
moonloom multihash inspect <multibase-multihash>
moonloom multihash verify <multibase-multihash> <text>
moonloom cid encode [--version 0|1] [--codec <name>] [--algorithm <name>] <text>
moonloom cid decode <cid>
moonloom cid verify <cid> <text>
moonloom multiaddr parse <text>
moonloom multiaddr encode <text>
moonloom multiaddr decode [--format base64|hex] <data>moon run cmd/main -- version
moon run cmd/main -- cid encode hellomoon run examples/artifact_cid
moon run examples/multiaddr_normalize
moon run examples/cross_language_fixturemoon check --target all
moon test --target all
moon build
moon package --listfn Cid::verify(self : Cid, content : BytesView, provider : HashProvider, limits : Limits) -> Result[Unit, MoonLoomError]fn HashProvider::hash(self : HashProvider, algorithm : HashAlgorithm, data : BytesView) -> Result[Bytes, MoonLoomError]fn HashProvider::new(digest : (HashAlgorithm, BytesView) -> Result[Bytes, MoonLoomError]) -> HashProviderpub struct Limits {
max_input_bytes : Int
max_varint_bytes : Int
max_digest_bytes : Int
max_multiaddr_bytes : Int
}fn Limits::check_digest(self : Limits, context : String, length : Int) -> Result[Unit, MoonLoomError]fn Limits::check_input(self : Limits, context : String, length : Int) -> Result[Unit, MoonLoomError]pub(all) enum MoonLoomError {
InputTooLong(String, Int, Int)
OffsetOutOfBounds(Int)
Truncated(String, Int)
InvalidVarint(String, Int)
NonCanonicalVarint(Int)
UnknownBase(Char)
InvalidBaseCharacter(Char, Int)
InvalidPadding(String, Int)
UnknownCodec(UInt64)
UnknownCodecName(String)
InvalidField(String, Int)
UnsupportedHashAlgorithm(String)
DigestLengthMismatch(String, Int, Int)
HashMismatch
InvalidMultihash(String, Int)
InvalidCid(String, Int)
CidCodecMismatch(UInt64)
InvalidCodec(UInt64)
InvalidProtocolValue(String)
InvalidPort(Int)
UnknownProtocol(String)
} derive(Eq, Debug)impl Show for MoonLoomErrorfn Multiaddr::from_segments(segments : Array[PathSegment], limits : Limits) -> Result[Multiaddr, MoonLoomError]fn Multiaddr::push(self : Multiaddr, segment : PathSegment, limits : Limits) -> Result[Multiaddr, MoonLoomError]fn Multihash::create(algorithm : HashAlgorithm, digest : BytesView, limits : Limits) -> Result[Multihash, MoonLoomError]fn Multihash::verify(self : Multihash, content : BytesView, provider : HashProvider, limits : Limits) -> Result[Unit, MoonLoomError]fn PathSegment::new(protocol : Protocol, value : ProtocolValue) -> Result[PathSegment, MoonLoomError]pub(all) struct ProtocolInfo {
protocol : Protocol
code : UInt64
name : String
value_kind : ProtocolValueKind
} derive(Eq, Debug)pub(all) enum ProtocolValue {
Empty
Ipv4(Ipv4Address)
Ipv6(Ipv6Address)
Domain(String)
Port(Int)
PeerId(String)
Text(String)
Raw(Bytes)
} derive(Eq, Debug)fn WireReader::read_fixed(self : WireReader, context : String, length : Int) -> Result[BytesView, MoonLoomError]fn WireReader::read_length_prefixed(self : WireReader, context : String) -> Result[BytesView, MoonLoomError]fn cid_from_content(codec : UInt64, algorithm : HashAlgorithm, content : BytesView, provider : HashProvider, limits : Limits) -> Result[Cid, MoonLoomError]fn cid_v0_from_content(content : BytesView, provider : HashProvider, limits : Limits) -> Result[Cid, MoonLoomError]fn decode_u64_with_limits(input : BytesView, limits : Limits) -> Result[(UInt64, Int), MoonLoomError]fn encode_u64(value : UInt64) -> BytesInstall
Download zipMoonLoom is a self-describing content-addressing toolkit for MoonBit.
Dependencies