Yet Another Serializer/Deserializer

Related tags

Encoding XML yaserde
Overview

yaserde   Build Status Latest Version Coverage Status

Yet Another Serializer/Deserializer specialized for XML

Goal

This library will support XML de/ser-ializing with all specific features.

Supported types

  • Struct
  • Vec
  • Enum
  • Enum with complex types
  • Option
  • String
  • bool
  • number (u8, i8, u32, i32, f32, f64)

Attributes

  • attribute: this field is defined as an attribute
  • default: defines the default function to init the field
  • flatten: Flatten the contents of the field
  • namespace: defines the namespace of the field
  • rename: be able to rename a field
  • root: rename the based element. Used only at the XML root.
  • skip_serializing_if: Skip the serialisation for this field if the condition is true
  • text: this field match to the text content

Custom De/Ser-rializer

Any type can define a custom deserializer and/or serializer. To implement it, define the implementation of YaDeserialize/YaSerialize

impl YaDeserialize for MyType {
  fn deserialize<R: Read>(reader: &mut yaserde::de::Deserializer<R>) -> Result<Self, String> {
    // deserializer code
  }
}
impl YaSerialize for MyType {
  fn serialize<W: Write>(&self, writer: &mut yaserde::ser::Serializer<W>) -> Result<(), String> {
    // serializer code
  }
}
Comments
  • Is it possible not to associate a namespace?

    Is it possible not to associate a namespace?

    Hello,

    I have an xml compatible file, however, it does not use the namespace associations in all scopes. Is it possible to still retain the namespace value, but not associate the namespace with a struct?

    For example: I have this file (will skip for brevity)

    <MPD mediaPresentationDuration="PT1H50M47S" minBufferTime="PT19S" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" xmlns="urn:mpeg:dash:schema:mpd:2011">
    <!-- skip for brevity ... -->
    </MPD>
    

    the xmlns="urn:mpeg:dash:schema:mpd:2011" is signaled within the library, and appropriately asked to be used. However, I would like to not have such association, if possible. At the moment, I'm signaling the struct with

    #[yaserde(root="MPD", prefix="mpd", namespace="mpd: urn:mpeg:dash:schema:mpd:2011")]

    and all the underlying associated structs.

    I then get the following output

    <mpd:MPD xmlns:mpd="urn:mpeg:dash:schema:mpd:2011" mediaPresentationDuration="PT1H50M47S" minBufferTime="PT19S" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static"><ProgramInformation moreInformationURL="www.castLabs.com" />
    <!-- skip for brevity ... -->
    </mpd:MPD>
    

    I'd, however, and, if possible, to have the same output as original. The reason for such, is that I sometimes get a file where I need to only modify one element without changing anything else. To avoid any inconsistancies or structural changes, I'd like to output the same as original only with changed value.

    Additionally, is it possible to signal retention of attribute positioning in the order they were originally in? At the moment, the attributes appear to serialize in an unordered fashion.

    opened by mlevkov 8
  • (de)serialize ADT (enums)

    (de)serialize ADT (enums)

    (De)serialization of this type is not implemented yet:

    struct Test {
        Empty,
        Full(String)
    }
    

    An XML (de)serialization library could really make a difference in Rust. There are only a few languages that have good ADT support. But in XML they are common, e.g. xsd:choice.

    enhancement 
    opened by vandenoever 8
  • Error in derive(YaDeserialize): wrong number of type arguments: expected 1, found 0

    Error in derive(YaDeserialize): wrong number of type arguments: expected 1, found 0

    I'm getting an error image

    for the following:

    #[derive(Default, Debug, Clone, PartialEq, YaSerialize, YaDeserialize)]
    #[yaserde(root = "layout")]
    pub struct Layout {
    	#[yaserde(attribute)]
    	pub version: u32,
    	#[yaserde(attribute)]
    	pub mode: u32,
    	#[yaserde(attribute)]
    	pub w: u32,
    	#[yaserde(attribute)]
    	pub h: u32,
    	#[yaserde(attribute)]
    	pub orientation: Orientation,
    	pub tabpage: Tabpage,
    }
    
    #[derive(Default, Debug, Clone, PartialEq, YaSerialize, YaDeserialize)]
    pub struct Tabpage {
    	#[yaserde(attribute)]
    	pub name: String,
    	#[yaserde(attribute)]
    	pub scalef: f32,
    	#[yaserde(attribute)]
    	pub scalet: f32,
    	#[yaserde(attribute)]
    	pub li_t: String,
    	#[yaserde(attribute)]
    	pub li_c: String,
    	#[yaserde(attribute)]
    	pub li_s: String,
    	#[yaserde(attribute)]
    	pub li_o: String,
    	#[yaserde(attribute)]
    	pub li_b: String,
    	#[yaserde(attribute)]
    	pub la_t: String,
    	#[yaserde(attribute)]
    	pub la_c: String,
    	#[yaserde(attribute)]
    	pub la_s: String,
    	#[yaserde(attribute)]
    	pub la_o: String,
    	#[yaserde(attribute)]
    	pub la_b: String,
    	pub control: Vec<Control>,
    }
    
    #[derive(Default, Debug, Clone, PartialEq, YaSerialize, YaDeserialize)]
    pub struct Control {
    	#[yaserde(attribute)]
    	pub name: String,
    	#[yaserde(attribute)]
    	pub x: u32,
    	#[yaserde(attribute)]
    	pub y: u32,
    	#[yaserde(attribute)]
    	pub w: u32,
    	#[yaserde(attribute)]
    	pub h: u32,
    	#[yaserde(attribute)]
    	pub color: String,
    	#[yaserde(attribute)]
    	pub scalef: f32,
    	#[yaserde(attribute)]
    	pub scalet: f32,
    	#[yaserde(attribute)]
    	pub local_off: Option<bool>,
    	#[yaserde(attribute)]
    	pub sp: Option<String>,
    	#[yaserde(attribute)]
    	pub sr: Option<String>,
    	pub midi: Option<Midi>,
    	#[yaserde(attribute)]
    	pub response: Option<Response>,
    	#[yaserde(attribute)]
    	pub inverted: Option<bool>,
    	#[yaserde(attribute)]
    	pub centered: Option<bool>,
    	#[yaserde(attribute)]
    	pub norollover: Option<bool>,
    }
    
    #[derive(Debug, Clone, PartialEq, YaSerialize, YaDeserialize)]
    pub enum Response { absolute, relative }
    
    #[derive(Debug, Clone, PartialEq, YaSerialize, YaDeserialize)]
    pub enum Orientation { vertical, horizontal }
    
    #[derive(Default, Debug, Clone, PartialEq, YaSerialize, YaDeserialize)]
    pub struct Midi {
    	#[yaserde(attribute)]
    	pub var: String,
    	#[yaserde(attribute)]
    	#[yaserde(rename = "type")]
    	pub typ: String,
    	#[yaserde(attribute)]
    	pub channel: u8,
    	#[yaserde(attribute)]
    	pub data1: u8,
    	#[yaserde(attribute)]
    	pub data2f: u8,
    	#[yaserde(attribute)]
    	pub data2t: u8,
    	#[yaserde(attribute)]
    	pub sysex: String,
    }
    

    wrong number of type arguments: expected 1, found 0 expected 1 type argument


    Btw, my goal is to serialize xml docs in this format:

    <?xml version="1.0" encoding="UTF-8"?>
    <layout version="16" mode="3" w="460" h="736" orientation="vertical">
        <tabpage name="MQ==" scalef="0.0" scalet="1.0" li_t="" li_c="gray" li_s="14" li_o="false" li_b="false" la_t="" la_c="gray" la_s="14" la_o="false" la_b="false">
            <control name="cHVzaDI1" x="114" y="680" w="45" h="45" color="red" scalef="0.0" scalet="1.0" type="push" local_off="false" sp="true" sr="true">
                <midi var="x" type="1" channel="1" data1="25" data2f="0" data2t="127" sysex="" />
            </control>
            <control name="cm90YXJ5MA==" x="14" y="569" w="100" h="100" color="red" scalef="0.0" scalet="1.0" type="rotaryh" response="absolute" inverted="false" centered="false" norollover="true">
                <midi var="x" type="0" channel="1" data1="0" data2f="0" data2t="127" sysex="" />
            </control>
            <control name="ZmFkZXIz" x="0" y="151" w="120" h="40" color="blue" scalef="0.0" scalet="1.0" type="faderh" response="relative" inverted="false" centered="false" />
        </tabpage>
    </layout>
    

    How can I do this with yaserde? :)

    opened by Boscop 8
  • Support enum as top level element

    Support enum as top level element

    I have an XML "schema" (extremely ad-hoc, which I did not design) that can be one of two things:

    <body>
      <usefulData />
    </body>
    

    or:

    <Extension version="1.1">
      <binaryData>1</binaryData>
    </Extension>
    

    I need to be able to deserialize either one of these, and I don't know which one will arrive from the network connection. So, I wrote an enum:

    #[derive(PartialEq, Eq, Debug, YaDeserialize)]
    pub(super) enum AllTopXmls {
        #[yaserde(rename="body")]
        Body(Body),
        Extension(Extension),
    }
    
    // Required for YaDeserialize
    impl Default for AllTopXmls {
        fn default() -> Self {
            AllTopXmls::BcXml(Default::default())
        }
    }
    
    struct Body { /* ... */ }
    
    #[derive(PartialEq, Eq, Default, Debug, YaDeserialize)]
    pub struct Extension {
        #[yaserde(rename="binaryData")]
        pub binary_data: u32,
    }
    

    Unfortunately, deserializing this does not work:

    [DEBUG bc::xml] Enum: start to parse "Extension"
    [DEBUG bc::xml] Struct: start to parse "Extension"
    [DEBUG yaserde::de] Fetched StartElement(Extension, {"": "", "xml": "http://www.w3.org/XML/1998/namespace", "xmlns": "http://www.w3.org/2000/xmlns/"}, [version -> 1.1])
    [DEBUG yaserde::de] Fetched StartElement(binaryData, {"": "", "xml": "http://www.w3.org/XML/1998/namespace", "xmlns": "http://www.w3.org/2000/xmlns/"})
    [DEBUG yaserde::de] Fetched Characters(1)
    [DEBUG yaserde::de] Fetched EndElement(binaryData)
    [DEBUG yaserde::de] Fetched EndElement(Extension)
    thread 'bc::xml::test_binary_deser' panicked at 'called `Result::unwrap()` on an `Err` value: "unknown event EndDocument"', src/bc/xml.rs:258:13
    

    Invoking the deserializer on Body or Extension explicitly works fine. But I want yaserde to choose.

    Thank you very much for this library. It is the only serde-like library that knows how to correctly serialize nested structs and it saved my sanity.

    enhancement 
    opened by thirtythreeforty 7
  • Strange attribute deserializing

    Strange attribute deserializing

    Sorry for the issue name :) please see the example

    Input:

    <DOMSymbolItem name="dagger" last_modified="1414141442">
      <timeline>
        <DOMTimeline name="dagger timeline name" current_frame="7" guides="11">
          <layers>
            <DOMLayer name="Layer 2" name2="Lalayer 2">
            </DOMLayer>
            <DOMLayer name="Layer 1" name2="Lalayer 1">
            </DOMLayer>
          </layers>
        </DOMTimeline>
      </timeline>
    </DOMSymbolItem>
    

    Structs:

    #[derive(YaDeserialize, Debug)]
    struct Level {
        #[yaserde(attribute)]
        last_modified: u64,
        #[yaserde(attribute, rename = "name")]
        named: String,
        timeline: DOMTimeline,
    }
    
    #[derive(YaDeserialize, Debug, Default)]
    struct DOMTimeline {
        #[yaserde(attribute, rename = "name")]
        named: String,
        #[yaserde(attribute)]
        name2: String,
        #[yaserde(attribute)]
        current_frame: String,
        #[yaserde(attribute)]
        guides: String,
    }
    

    Output:

    Level {
        last_modified: 1414141442,
        named: "dagger",
        timeline: DOMTimeline {
            named: "Layer 1",
            name2: "Lalayer 1",
            current_frame: "7",
            guides: "11"
        }
    }
    
    opened by ghost 7
  • Is

    Is "skip_serializing_if" not supported yet?

    Hello,

    I've various attributes and structs that are optionally present based on the context. I see that "skip_serializing_if" is not checked as supported. Before I consider rewriting my codebase to use your code, would you be kind to let me know if "skip_serializing_if" is supported?

    Highest Regards, Max

    enhancement help wanted 
    opened by mlevkov 6
  • Failed to parse with default namespace

    Failed to parse with default namespace

    I need to parse the following

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <root xmlns="http://www.w3c.org/abc" date="2020">
      <buecher>
        <buch id="123">
          <iban>123</iban>
        </buch>
        <buch id="456">
          <iban>456</iban>
        </buch>
      </buecher>
    </root>
    

    but i get the error "bad namespace for iban, found http://www.w3c.org/abc"

    extern crate yaserde;
    
    #[macro_use]
    extern crate yaserde_derive;
    
    use std::io::Read;
    use yaserde::YaDeserialize;
    
    use std::fs::File;
    use std::io::BufReader;
    
    #[yaserde(
      prefix = "ns",
      namespace = "ns: http://www.w3c.org/abc"
    )]
    #[derive(Debug, YaDeserialize)]
    struct Root {
      date: String,
      buecher: Option<Buecher>,
    }
    
    #[derive(Debug, YaDeserialize)]
    struct Buecher {
      buch: Vec<Buch>,
    }
    
    #[derive(Debug, YaDeserialize)]
    struct Buch {
      id: String,
      iban: String,
    }
    
    fn main() {
      let src_file = File::open("data/test.xml");
      if src_file.is_ok() {
        let _buf_reader = BufReader::new(src_file.unwrap());
        let _data: Root = yaserde::de::from_reader(_buf_reader).unwrap();
        println!("{:#?}", _data);
      }
    }
    
    

    also duplicating the yaserde definition to every struct does not help

    opened by kaedwen 5
  • Deserialized field type cannot contain namespace

    Deserialized field type cannot contain namespace

    Hey everybody. Compilation fails if I specify field name along with namespace. Without namespace std::string:: everything is fine.

    use std::io::Read;
    use yaserde::YaDeserialize;
    use yaserde_derive::YaDeserialize;
    use log::debug;
    
    #[derive(YaDeserialize, Debug)]
    struct MyRoot {
        my_field: std::string::String,
    }
    
    fn main() {
        let config: MyRoot = yaserde::de::from_str("").unwrap();
        println!("{:#?}", config);
    }
    

    Error message:

    error[E0063]: missing field `my_field` in initializer of `MyRoot`
     --> src/main.rs:7:8
      |
    7 | struct MyRoot {
      |        ^^^^^^ missing `my_field`
    
    enhancement 
    opened by DmitrySamoylov 5
  • 2018 edition requires adding xml-rs and log dependencies

    2018 edition requires adding xml-rs and log dependencies

    I'm using 1.37 stable with 2018 edition enabled, and I found I needed to add the xml-rs and log dependencies in order to fix some build issues. This may just be my own misunderstanding of how rust dependencies work.

    [package]
    name = "minimum-yaserde"
    version = "0.1.0"
    authors = ["Me"]
    edition = "2018"
    
    [dependencies]
    yaserde = "0.3"
    yaserde_derive = "0.3"
    
    # I wouldn't expect to have to add these myself
    xml-rs = ""
    log = ""
    

    Without adding xml-rs as a dependency:

    src/main.rs|6 col 10 error 433| failed to resolve: could not find `xml` in `{{root}}`
    ||   |
    || 6 | #[derive(YaDeserialize, Debug)]
    ||   |          ^^^^^^^^^^^^^ could not find `xml` in `{{root}}`
    src/main.rs|6 col 10 error 433| failed to resolve: use of undeclared type or module `XmlEvent`
    ||   |
    || 6 | #[derive(YaDeserialize, Debug)]
    ||   |          ^^^^^^^^^^^^^ use of undeclared type or module `XmlEvent`
    

    Without adding log as a dependency:

    src/main.rs|5 col 10 error| cannot find macro `debug!` in this scope
    ||   |
    || 5 | #[derive(YaDeserialize, Debug)]
    ||   |          ^^^^^^^^^^^^^
    
    opened by steven-joruk 5
  • [WIP] Implement support for strict deserialization in structs.

    [WIP] Implement support for strict deserialization in structs.

    Support can be enable like this:

    #[derive(YaDeserialize, PartialEq, Debug)]
    #[yaserde(strict, root = "root")]
    pub struct XmlStruct {
      expected_tag: String,
    }
    

    Enabling this will cause errors when:

    • [x] The root tag has an unexpected name
    • [x] Any unexpected tag appears in the xml
    • [x] Any unexpected attribute appears in the xml
    • [ ] An expected tag is missing in the xml (ignore default)
    • [ ] An expected attribute is missing in the xml (ignore default)
    opened by definitelynobody 5
  • Add skip_serializing_if support for attributes

    Add skip_serializing_if support for attributes

    Before that change skip_serializing_if won't work for struct fields that marked as attribute. I changed ser_wrap_default_attribute func and added test for that change.

    opened by olvyko 4
  • Is it possible to parse tags with the same name but different children?

    Is it possible to parse tags with the same name but different children?

    I'm having some trouble trying to find the best way of deserializing the following XML. Inside TaskList the Task tags are the same but their inner children are different. Is there any way of parsing this in order to differentiate between 2 tasks based on their class attribute?

    I was playing around with Enums and such but I don't see any way of doing this except implementing the deserialize method manually. Was trying to find a similar example in the examples folder but I don't see nothing like this.

    Thanks in advance (I'm quite new to rust so I am sorry if this question seems silly)

    <tasklist>
    <task class="Aggregator" documentation="" name="Task Aggregator" taskkey="TaskAggregator" x="4000" y="640">
        <parameter name="Entity" type="Map">
            <parameter name="key" type="String">xxx</parameter>
            <parameter name="value" type="String">xxx</parameter>
        </parameter>
    </task>
    <task class="Transform" documentation="" name="Transform" taskkey="Transform" x="1440" y="560">
        <parameter name="Rules" type="Xml">
            <root advancedmode="false">\n    <set in="Flow" toValue="123" varType="String" variable="asd"></set>\n</root>
        </parameter>
    </task>
    </tasklist>
    
    opened by miguelsilva5989 0
  • Update env_logger requirement from 0.9.0 to 0.10.0

    Update env_logger requirement from 0.9.0 to 0.10.0

    Updates the requirements on env_logger to permit the latest version.

    Changelog

    Sourced from env_logger's changelog.

    0.10.0 - 2022-11-24

    MSRV changed to 1.60 to hide optional dependencies

    Fixes

    • Resolved soundness issue by switching from atty to is-terminal

    Breaking Changes

    To open room for changing dependencies:

    • Renamed termcolor feature to color
    • Renamed atty feature to auto-color

    0.9.3 - 2022-11-07

    • Fix a regression from v0.9.2 where env_logger would fail to compile with the termcolor feature turned off.

    0.9.2 - 2022-11-07

    • Fix and un-deprecate Target::Pipe, which was basically not working at all before and deprecated in 0.9.1.

    0.9.0 -- 2022-07-14

    Breaking Changes

    • Default message format now prints the target instead of the module

    Improvements

    • Added a method to print the module instead of the target
    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Attribute does not serialize in enum

    Attribute does not serialize in enum

    use yaserde_derive::YaSerialize;
    
    #[derive(Default, YaSerialize)]
    struct A
    {
        #[yaserde(attribute)]
        val: u8
    }
    #[derive(Default, YaSerialize)]
    struct B
    {
        val: u8
    }
    #[derive(YaSerialize)]
    enum MainNode
    {
        A(A),
        B(B),
    }
    
    #[derive(Default, YaSerialize)]
    struct Main
    {
        #[yaserde(child, flatten)]
        m: Vec<MainNode>
    }
    
    fn sample() -> Main {
        Main {
            m: vec![
                MainNode::A(
                    A{val: 1}
                    ),
                MainNode::B(
                    B{val: 2}
                    )
            ]
        }
    }
    fn main()
    {
        let node = sample();
        println!("{}", yaserde::ser::to_string(&node).unwrap());
    }
    
    #[cfg(test)]
    mod tests {
        const XML: &str = r##"<?xml version="1.0" encoding="utf-8"?><Main><A val="1" /><B><val>2</val></B></Main>"##;
        use crate::sample;
        #[test]
        fn attribute() {
            let node = sample();
            let data = yaserde::ser::to_string(&node).unwrap();
            assert_eq!(data, XML);
        }
    }
    

    the A::val is not serialized from Main structure.

    opened by sobczyk 0
  • Impl YaDeserialize for a type that should be treated as Primitive

    Impl YaDeserialize for a type that should be treated as Primitive

    ~I am baffled. I can run the examples crate tests just fine.~

    ~However, when I run this on my own code, deriving YaDeserialize fails because the constraint of T: YaDeserialize isn't met because T doesn't implement YaDeserialize.~

    ~This is for types like i32, String, etc.~

    ~I have looked through the code and I don't see anywhere where YaDeserialize is implemented for anything, so I have no idea how the examples crate works, where it has some fields which are String.~

    *Edit*

    I ran cargo-expand, and now understand how it avoids needing to impl YaDeserialize for primitive types. It bakes the from_str directly into the struct's deserialization routine (that seems like it'd cause a lot of unnecessary code duplication, but I guess that pertains to the RFC for the API redesign)

    I guess my more fundamental question is:

    How can I impl YaDeserialize for a custom type which I basically want to treat as a String it's a specially formatted Timestamp which will always serialize to a String-ish type, and always be parsed from a String-ish type. So it shouldn't have any properties, etc.

    At the moment, I'm attempting to duplicate the impl for i32 and string members that I find.

    However, I'm not sure how I can direct yaserde_derive::YaDeserialize to fetch the type correctly, since I basically want to treat it as a primitive.

    opened by rrichardson 1
  • WIP: Fields mandatory unless specified otherwise

    WIP: Fields mandatory unless specified otherwise

    Implements #144.

    Not happy yet with how some of the error handling is taking place. Most notably optional structs are set to None if they do not parse successfully.

    Secondly this change is a major move from the current semantics of the crate. There should be a discussion on whether this is acceptable at all, and how to communicate clearly to users that whilst their code may still compile, input data will be rejected unless #[yaserde(default)] is added here and there.

    opened by Wassasin 0
  • #[derive(YaDeserialize)] requires Default

    #[derive(YaDeserialize)] requires Default

    When deriving YaDeserialize the macro requires that all member types implement the Default trait. I suppose this is to instantiate a value even when the XML document is missing that child or attribute.

    As a consumer of this crate I would have to either make all fields Option, or implement Default for all of them. However I would rather that YaDeserialize would throw an error if that child or attribute is missing from the XML, and have an attribute #[yaserde(default)] for the current behaviour.

    opened by Wassasin 0
Owner
null
A lightning-fast Sixel serializer/deserializer

sixel-image This is a (pretty fast!) sixel serializer/deserializer with cropping support. It accepts a sixel serialized string byte-by-byte, deseriali

null 12 Oct 27, 2022
An HCL serializer/deserializer for rust

hcl-rs This crate provides functionality to deserialize, serialize and manipulate HCL data. The main types are Deserializer for deserializing data, Se

null 56 Dec 31, 2022
Procedural macro to derive Serde serializer-deserializer for Prost

prost-serde-derive prost-serde-derive is a procedural macro to generate Serde serializers and deserializers for Prost-generated structs. Rationale Cur

Park Joon-Kyu 4 Dec 15, 2022
High Performance Blockchain Deserializer

bitcoin-explorer bitcoin_explorer is an efficient library for reading bitcoin-core binary blockchain file as a database (utilising multi-threading). D

Congyu 18 Dec 22, 2022
Yet another fancy watcher. (Rust)

funzzy Yet another fancy watcher. (Inspired by antr / entr) Configure execution of different commands using semantic yaml. # .watch.yaml # list here a

Cristian Oliveira 188 Dec 12, 2022
Yet Another Technical Analysis library [for Rust]

YATA Yet Another Technical Analysis library YaTa implements most common technical analysis methods and indicators. It also provides you an interface t

Dmitry 197 Dec 29, 2022
Yarte stands for Yet Another Rust Template Engine

Should we start to worry? bytes-buf feature can produce SIGILL. avx and sse flags are in almost all cpus of x86 and x86_64 architectures. More details

Juan Aguilar 249 Dec 19, 2022
Yet another pager in Rust

rust-pager Yet another pager in Rust Features Vim like keybindings Search substring Mouse wheel support Install cargo install rust-pager Usage <comman

null 19 Dec 7, 2022
Yet another trojan-gfw in Rust

Trojan-rust Yet another trojan-gfw implementation in Rust. Features Server mode only (for now). Supports Redis auth & flow stat. Uses OpenSSL as crypt

粒粒橙 34 Oct 25, 2022
Yet Another Kev-Value DataBase

Yet Another Kev-Value DataBase Extremely simple (simplest possible?) single-file BTree-based key-value database. Build for fun and learning: goal is t

Sergey Melnychuk 18 May 23, 2022
Yet another ROS2 client library written in Rust

RclRust Target CI Status Document Foxy (Ubuntu 20.04) Introduction This is yet another ROS2 client library written in Rust. I have implemented it inde

rclrust 42 Dec 1, 2022
Yet another gem miner

Rusty Pickaxe Multithreaded CPU miner for Provably Rare Gems, written in Rust. There is also closed-source GPU version, waiting to be released. Config

Someone 7 Aug 11, 2022
Yet Another Programming Language

Yet Another Programming Language

null 4 Sep 15, 2021
Yet Another Parser library for Rust. A lightweight, dependency free, parser combinator inspired set of utility methods to help with parsing strings and slices.

Yap: Yet another (rust) parsing library A lightweight, dependency free, parser combinator inspired set of utility methods to help with parsing input.

James Wilson 117 Dec 14, 2022
Yet Another File Transfer Protocol.

yaftp Yet Another File Transfer Protocol. Build & Run $> cargo build --release Features C2C Lightweight Per something per session High performence Res

b23r0 20 Sep 22, 2022
Yet another geter/setter derive macro.

Gusket Gusket is a getter/setter derive macro. Comparison with getset: gusket only exposes one derive macro. No need to derive(Getters, MutGetters, Se

Jonathan Chan Kwan Yin 2 Apr 12, 2022
Yay - Yet another Yogurt - An AUR Helper written in Go

Yay Yet Another Yogurt - An AUR Helper Written in Go Help translate yay: Transifex Features Advanced dependency solving PKGBUILD downloading from ABS

J Guerreiro 8.6k Jan 1, 2023
Yet another multi-purpose discord bot

virus yet another multi-purpose discord bot

miten 2 Jan 11, 2022
🥳Yet another crate to create native nodejs addons :)

nodex Yet another crate to create native nodejs addons :) This crate aims to make creating native nodejs addons very easy and comfortable. It is in a

uuhan 4 Mar 29, 2022
yet another typing test, but crab flavoured

toipe A trusty terminal typing tester for the tux. Usage Install cargo install toipe Run typing test toipe looks best on a nice terminal (such as Ala

Samyak Sarnayak 431 Dec 20, 2022