rico

Crates.iorico
lib.rsrico
version0.1.7
created_at2024-12-27 05:31:39.247101+00
updated_at2025-01-05 09:43:36.646797+00
descriptionA high-performance Apache Thrift IDL parser that converts Thrift IDL files to JSON AST
homepage
repositoryhttps://github.com/xnmeet/rico
max_upload_size
id1496208
size98,344
(xnmeet)

documentation

https://docs.rs/rico

README

Thrift Parser

A high-performance Apache Thrift IDL parser written in Rust that converts Thrift IDL files to JSON AST.

Features

  • 🚀 Fast and efficient parsing
  • 🎯 Complete Thrift IDL support
  • 🔄 JSON AST output
  • 📝 Comment preservation
  • 🎨 Detailed source location tracking
  • ⚡ Parallel processing support
  • 📊 Built-in benchmarking

Installation

[dependencies]
rico = { version = "*" }

Usage

Basic Parsing

use rico::Parser;

fn main() {
    let input = r#"
        namespace rs demo

        struct User {
            1: string name
            2: i32 age
        }
    "#;

    let mut parser = Parser::new(input);
    match parser.parse() {
        Ok(ast) => println!("{}", serde_json::to_string_pretty(&ast).unwrap()),
        Err(e) => eprintln!("Error: {}", e),
    }
}

Supported Thrift Features

  • Base types (i32, i64, string, etc.)
  • Collections (list, set, map)
  • Structs and Exceptions
  • Services and Functions
  • Enums
  • Constants
  • Typedefs
  • Namespaces
  • Includes
  • Comments and Annotations

Development

Building

cargo build --workspace

Running Tests

cargo test --workspace

Code Structure

  • Lexer: Tokenizes input using Logos
  • Parser: Recursive descent parser
  • AST: Strongly typed syntax tree
  • Location Tracking: Preserves source positions

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • Logos for lexer generation
  • Serde for JSON serialization
Commit count: 77

cargo fmt