kv2

Crates.iokv2
lib.rskv2
version0.1.2
sourcesrc
created_at2024-11-17 21:33:41.030916
updated_at2024-11-18 03:19:06.345948
descriptionkv2 (keyvalues 2) format parser with serde support
homepage
repositoryhttps://github.com/dxshie/kv2
max_upload_size
id1451568
size83,230
dashie (dxshie)

documentation

README

CI Crates.io Version docs.rs

kv2

A Rust crate for parsing Valve's KeyValues2 (KV2) format.

Overview

kv2 is a Rust library for parsing and serializing the KeyValues2 (KV2) format used by Valve in their games and tools. It allows you to read KV2 files and access their data in a structured way.

Features

  • Parsing: Parsing KV2 Format.
  • Deserialization: Deserialization Serde Support for the KV2 parsing.
  • Serialization: TODO.
  • Handles Various Data Types: Supports booleans, integers, floats, strings, arrays, hex arrays(binary blobs), objects, and null values.
  • Customizable Parsing: Built using the nom parser combinator library for flexibility.

Installation

Add kv2 to your Cargo.toml dependencies:

[dependencies]
kv2 = { version = "0.1.2", features = ["serde"] }

Example

use kv2::parse_kv2;
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
pub struct DmElement {
    id: String,
    name: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct DmeModel {
    id: String,
    visible: bool,
}

fn main() {
    let input = r#"
"DmElement"
{
"id" "elementid" "df939bf4-8dd6-435c-9eef-a6e25434ecca"
"name" "string" "root"
}

"DmeModel"
{
"id" "elementid" "90e0ae34-0671-478d-95f5-12fa5c905c7a"
"visible" "bool" "1"
}
        "#;

    match parse_kv2(input) {
        Ok(data) => {
            let element = DmElement::deserialize(data.1[0].clone());
            let model = DmeModel::deserialize(data.1[1].clone());
        }
        Err(e) => {
            error!("{:?}", e);
        }
    }
}
Commit count: 6

cargo fmt