oid 0.3.0

Rust-native library for building, parsing, and formating Object Identifiers (OIDs)
Documentation
# Object Identifier Library for Rust

[![Crate](https://img.shields.io/crates/v/oid.svg)](https://crates.io/crates/oid)
[![API](https://docs.rs/oid/badge.svg)](https://docs.rs/oid)
![Minimum rustc version](https://img.shields.io/badge/rustc-1.85+-lightgray.svg)

[Object Identifiers] are a standard of the [ITU] used to reference objects, things, and
concepts in a globally unique way. This crate provides for data structures and methods
to build, parse, and format OIDs.

## Basic Utilization

### Running Example

You can run the example code from [examples/basic.rs](examples/basic.rs) using cargo:

```sh
cargo run --example basic
```

### Parsing OID String Representation

```rust
use oid::prelude::*;
let oid = ObjectIdentifier::try_from("0.1.2.3")?;
```

### Parsing OID Binary Representation

```rust
use oid::prelude::*;
let oid = ObjectIdentifier::try_from(vec![0x00, 0x01, 0x02, 0x03])?;
```

### Encoding OID as String Representation

```rust
use oid::prelude::*;
let oid = ObjectIdentifier::try_from("0.1.2.3")?;
let oid: String = oid.into();
assert_eq!(oid, "0.1.2.3");
```

### Encoding OID as Binary Representation

```rust
use oid::prelude::*;
let oid = ObjectIdentifier::try_from(vec![0x00, 0x01, 0x02, 0x03])?;
let oid: Vec<u8> = oid.into();
assert_eq!(oid, "0.1.2.3");
```

### Adding as a dependency with [cargo-edit]

```sh
cargo add oid
```

### Adding as a dependency with [cargo-edit] for a `!#[no_std]` crate

```sh
cargo add oid --no-default-features
```

### Adding as a dependency directly to `Cargo.toml`

```toml
[dependencies]
oid = "0.3"
```

### Adding as a dependency directly to `Cargo.toml` for a `!#[no_std]` crate

```toml
[dependencies]
oid = { version = "0.3", default-features = false }
```

## Building

The build routines have been automated with [cargo-make]. If you're not using [cargo-make], you can check [Makefile.toml] for the relevant manual build procedures.

### Building for a platform with Rust Standard Library

```sh
cargo make
```

### Building for an embedded platform or `#![no_std]`

```sh
cargo make build_no_std
```

### Fuzzing Inputs

Profiles for [cargo-fuzz] are included for fuzzing the inputs on public method parameters.

#### Fuzz Binary OID Parsing

```sh
cargo make fuzz_parse_binary
```

#### Fuzz String OID Parsing

```sh
cargo make fuzz_parse_string
```

## License

Licensed under either of [Apache License, Version 2.0](LICENSE-APACHE) or [MIT license](LICENSE-MIT) at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this library by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

[object identifiers]: https://en.wikipedia.org/wiki/Object_identifier
[itu]: https://en.wikipedia.org/wiki/International_Telecommunications_Union
[cargo-edit]: https://github.com/killercup/cargo-edit
[cargo-make]: https://github.com/sagiegurari/cargo-make
[cargo-fuzz]: https://github.com/rust-fuzz/cargo-fuzz