0.3.0 • Published 11 months ago

nil-zonefile v0.3.0

Weekly downloads
-
License
-
Repository
-
Last release
11 months ago

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;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Read from CBOR
    let cbor_bytes: &[u8] = &[0u8; 0];  // example empty CBOR data
    let zonefile = ZoneFile::from_cbor(cbor_bytes)?;

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

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

0.3.0

11 months ago

0.2.2

11 months ago

0.2.1

11 months ago

0.2.0

11 months ago

0.1.9

11 months ago

0.1.8

11 months ago

0.1.7

11 months ago

0.1.6

11 months ago

0.1.5

11 months ago

0.1.4

11 months ago

0.1.3

11 months ago

0.1.2

11 months ago

0.1.1

12 months ago

0.1.0

12 months ago