nil-zonefile

Crates.ionil-zonefile
lib.rsnil-zonefile
version
sourcesrc
created_at2025-01-30 15:06:48.829371
updated_at2025-01-30 15:06:48.829371
descriptionA library for parsing and creating zonefiles on the new internet.
homepage
repository
max_upload_size
id1536467
Cargo.toml error:TOML parse error at line 17, column 1 | 17 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Larry Salibra (larrysalibra)

documentation

README

NIL Zonefile

A Rust library for parsing and creating NIL zonefiles. This library supports both WebAssembly and native Rust environments.

Installation

Add this to your Cargo.toml:

[dependencies]
nil-zonefile = "0.1.0"

For WebAssembly support, enable the wasm feature:

[dependencies]
nil-zonefile = { version = "0.1.0", features = ["wasm"] }

Usage

Rust

use nil_zonefile::ZoneFile;
fn main() -> Result<(), serde_json::Error> {
// Parse a zonefile
let json_str = r#"{
"zonefile": {
"owner": "SP3D03X5BHMNSAAW71NN7BQRMV4DW2G4JB3MZAGJ8",
"general": "Example Name",
"twitter": "@example",
"url": "example.locker",
"nostr": "",
"lightning": "",
"btc": "bc1..."
}
}"#;
let zonefile = ZoneFile::from_str(json_str)?;
// Convert back to JSON
let output = zonefile.to_string()?;
Ok(())
}

JavaScript/TypeScript (via WebAssembly)

=

import { ZoneFile } from 'nil-zonefile';

const zonefile = ZoneFile.fromString(jsonString);
const output = zonefile.toString();

Rust CBOR Support

use nil_zonefile::ZoneFile;

// Read from CBOR
let cbor_bytes: &[u8] = /* your CBOR data */;
let zonefile = ZoneFile::from_cbor(cbor_bytes)?;

// Write to CBOR
let output_bytes: Vec<u8> = zonefile.to_cbor()?;

JavaScript CBOR Support

import { parse_zonefile_cbor, create_zonefile_cbor } from 'nil-zonefile';

// Read from CBOR
const cborBytes = new Uint8Array(/* your CBOR data */);
const result = parse_zonefile_cbor(cborBytes);

// Write to CBOR
const output = create_zonefile_cbor(cborBytes);

Generate Zonefile

import { generateZonefile } from 'nil-zonefile';

const zonefile = {
    zonefile: {
        owner: "SP3D03X5BHMNSAAW71NN7BQRMV4DW2G4JB3MZAGJ8",
        general: "Example Name",
        twitter: "@example",
        url: "example.locker",
        nostr: "",
        lightning: "",
        btc: "bc1...",
        subdomains: {}
    },
    version: "1.0.0",
    status: "current"
};

// Generate uncompressed CBOR
const bytes = generateZonefile(zonefile);

// Generate compressed CBOR using zstd compression
const compressedBytes = generateZonefile(zonefile, true);

Building on macOS

When building this project on macOS (especially for WebAssembly), you need LLVM installed and configured correctly. Two options are available:

Option 1: Using the Setup Script

Run the provided setup script:

source ./setup-llvm.sh

This script will:

  1. Check if you're on macOS
  2. Install LLVM via Homebrew if needed
  3. Set up the required environment variables

Option 2: Manual Setup

  1. Install LLVM if you haven't already:

    brew install llvm
    
  2. Set up the required environment variables:

    export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
    export CC=/opt/homebrew/opt/llvm/bin/clang
    export AR=/opt/homebrew/opt/llvm/bin/llvm-ar
    

    To make these changes permanent, add the above lines to your ~/.zshrc or ~/.bash_profile.

License

MIT License - Copyright (c) 2025 New Internet Labs Limited

Commit count: 0

cargo fmt