sickle

Crates.iosickle
lib.rssickle
version0.1.2
created_at2025-12-02 00:05:59.673773+00
updated_at2026-01-18 21:36:52.530839+00
descriptionA robust Rust parser for CCL (Categorical Configuration Language) with Serde support
homepagehttps://github.com/tylerbutler/santa
repositoryhttps://github.com/tylerbutler/santa
max_upload_size
id1960890
size565,832
Tyler Butler (tylerbutler)

documentation

README

Sickle

A robust Rust parser for CCL (Categorical Configuration Language) with optional Serde support.

Features

  • Pure Rust implementation - Zero unsafe code
  • Two API styles - Direct Model navigation or Serde deserialization
  • Complete CCL support - Lists, nested records, multiline values, comments
  • Memory efficient - Optional string interning via feature flag
  • Well-tested - Comprehensive test suite with property-based tests

Quick Start

Direct API

use sickle::parse;

let ccl = r#"
name = Santa
version = 0.1.0
author = Tyler Butler
"#;

let model = parse(ccl)?;
assert_eq!(model.get("name")?.as_str()?, "Santa");
assert_eq!(model.get("version")?.as_str()?, "0.1.0");

Serde Integration

use serde::Deserialize;
use sickle::from_str;

#[derive(Deserialize)]
struct Config {
    name: String,
    version: String,
    author: String,
}

let ccl = r#"
name = Santa
version = 0.1.0
author = Tyler Butler
"#;

let config: Config = from_str(ccl)?;
assert_eq!(config.name, "Santa");

CCL Syntax

CCL uses simple key-value pairs with indentation for nesting:

/= This is a comment

name = MyApp
version = 1.0.0

/= Lists use empty keys
dependencies =
  = tokio
  = serde
  = clap

/= Nested configuration
database =
  host = localhost
  port = 5432
  credentials =
    username = admin
    password = secret

License

MIT

Commit count: 98

cargo fmt