Expand description
Β§π± RONKY π±
βConverting Rust types shouldnβt be this purr-fect, but here we areβ¦β
Β§πΊ What in the Whiskers is Ronky?
Imagine if your Rust types could speak other languages without learning a single foreign word. Thatβs Ronky β your codeβs personal polyglot translator that speaks fluent Arri, turning your carefully crafted Rust types into schemas that even JavaScript developers can understand.
Born from the frustration of manual schema creation (and named after a particularly vocal cat),
Ronky does the tedious work so you can focus on the important stuff β like deciding whether your
next variable should be called data or info (we both know youβll pick data).
π§ Paws at Work: Like a cat thatβs not quite finished knocking everything off your desk, Ronky is still under construction. Object serialization and deserialization are coming soon, probably right after this catnap. π§
Β§β¨ Features That Make You Go βMeow!β
Ronky doesnβt just toss your types over the fence to Arri-land. It crafts them with the same attention to detail that a cat gives to knocking your most precious possessions off shelves:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RONKY'S REPERTOIRE β
βββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββ€
β 𧬠Type Wizardry β - Transforms primitives with grace β
β β - Handles generic types without whining β
β β - Makes associated types feel welcome β
βββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββ€
β π§© Collection Conjuring β - Vectors become elegant "elements" β
β β - Maps manifest as "values" schemas β
β β - Optional types know when to disappear β
βββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββ€
β π‘οΈ Guardian Features β - Strict mode keeps schemas pristine β
β β - Discriminators tag unions properly β
β β - Circular refs handled without dizziness β
βββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββ€
β π Transformation Magic β - Case transformations (snake β UPPER) β
β β - Field renaming for multilingual joy β
β β - Nullable marking for optional presence β
βββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββ€
β π Documentation Delight β - Comments become documentation β
β β - Deprecation warnings that don't nag β
β β - Metadata that brings joy to readers β
βββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββWith Ronky, your type schema generation is both:
- Compile-time verified - Errors at compile time, not at 3 AM when youβre deploying
- Automatically generated - Because lifeβs too short to manually update schemas
π‘ Pro Tip: Ronkyβs powers grow with your documentation. The more doc comments you add, the more magnificent your schemas become. Itβs like feeding treats to a cat β the rewards are well worth it.
Β§π€ The Cool Cats Club (Compatible Crates)
Ronky has an extensive social network. Think of these crates as the neighborhood cats that regularly visit your backyard β theyβre all welcome and get special treatment:
TEMPORAL FRIENDS π°οΈ chrono, time
IDENTITY SPECIALISTS πͺͺ uuid
BIG NUMBER EXPERTS π’ bigdecimal, num-bigint, num-bigfloat
PRECISION MASTERS π° rust_decimal, decimal
WEB-SAVVY NAVIGATORS π url
DATA-HANDLING WIZARDS π bytes
CONCURRENT COMPANIONS π§΅ dashmap
OPTIMIZED PERFORMERS β‘ smallvecEach of these crates gets the VIP (Very Important Purring) treatment from Ronky. Their types are handled with the care and respect they deserve.
π Missing your favorite companion? Open an issue to suggest a new addition to Ronkyβs compatible crates collection. The more the merrier!
Β§π¨βπ» The Story Behind Ronky
Let me share the real origin story β Ronky wasnβt born from late-night caffeine-fueled frustration (though thereβs been plenty of that in my coding career). It all started when a friend dropped a Discord message with a link to the Arri project. One look at what Arri was doing with type conversions and I was hooked.
As a passionate Rustacean, I immediately thought: βThis is brilliant! But it needs Rust support.β And thus Ronky was born β creating a bridge between the elegant type system of Rust and the universal schema language of Arri.
I named it after my cat not just because he was adorable (though he absolutely was), but because he embodied what good libraries should be β helpful, reliable, and occasionally surprising you with something delightful. Like Ronky the cat finding innovative ways to get treats without moving, Ronky the library finds ways to update your API schemas without you lifting a finger.
My hope is that this library saves you time, prevents those pesky βthe API contract changed but the docs didnβtβ bugs, and maybe β just maybe β frees up enough of your day to spend time with your own four-legged friend (or fish, or rubber duck - whatever brings you joy).
Β§π The Illustrated Guide to Ronky
Β§π The Basic Transformation
use ronky::{Exportable, Exported, SCHEMA_VERSION};
use serde_json::{Value, from_str, to_string_pretty};
// Just add water (and a derive macro)
#[derive(Exported)]
#[arri(transform = "uppercase")] // LOUD NOISES
enum Result<T: Exportable, E: Exportable> {
/// When things go right (rarely, if you're me)
Ok(T),
/// When things go wrong (my default state)
Err(E),
}
// Announce our intentions to the world
println!("π§ͺ Creating an Arri {} schema and hoping for the best...", SCHEMA_VERSION);
// The cat-alchemy happens here
let schema_json = Result::<String, ()>::export()
.serialize()
.expect("this to work (please, I have deadlines)");
// Humans like pretty things
let pretty_json = to_string_pretty(&from_str::<Value>(&schema_json).unwrap()).unwrap();
// Admire our handiwork
println!("{}", pretty_json);
// Now go make a cup of tea, you've earned itΒ§π§© The Advanced Cat-egory: Building Complex Types
use ronky::{Exportable, Exported, SCHEMA_VERSION};
/// Metadata about things (and sometimes other things)
#[derive(Exported)]
struct About<T: Exportable> {
/// What we called it before marketing got involved
#[deprecated(since = "1.0.0", note = "Use `firstName` and `lastName` instead")]
name: String,
/// The name that appears on your coffee cup at Starbucks
first_name: String,
/// The name your parents use when you're in trouble
last_name: Option<String>,
/// The number that makes you sigh at birthday parties
age: u32,
/// The subject of our obsession
of: T,
}
/// A creature that creates Rust crates, ironically
#[derive(Exported)]
#[arri(strict)] // No surprises allowed! Like a cat with a cucumber
struct Human {
/// Fellow code-monkeys who review your PRs
friends: Vec<Human>, // Recursive types? No problem!
/// The real owners of your home
pets: Vec<About<Pet>>,
}
/// Fashion choices for the discerning feline
#[derive(Exported)]
#[arri(transform = ["snake_case", "uppercase"])] // MULTI_STYLE_TRANSFORMATION
enum CatColor {
/// Like my coffee and my humor
Black,
/// Like my documentation standards and error handling
White,
/// Like my moral compass when it comes to optimization
Gray,
/// Like my commit history after a weekend hackathon
MixedGrayWhite,
}
/// Entities that interrupt your Zoom calls at the worst possible moment
#[derive(Exported)]
#[arri(transform = "uppercase", discriminator = "species")]
enum Pet {
Dog {
/// The word you'll repeat 37 times at the dog park
name: String,
/// What you'll forget when the vet asks
#[arri(nullable)]
breed: Option<String>,
},
#[arri(rename = "cat")] // All hail the cat overlords!
Lion {
/// A suggestion they might consider responding to someday
name: String,
/// Their royal garment
#[arri(nullable)]
color: Option<CatColor>,
},
}π₯ Hot Tip: These examples arenβt just decorative β theyβre functional! Copy, paste, and experience the magic of Ronky firsthand. Your future self will thank you when your API documentation is automatically up-to-date.
Β§π The Ronky Memorial Section
/\_/\
( o.o )
> ^ <
/ O \ "Meow meow, transform types meow."
- Ronky (2010-2024)This library immortalizes a magnificent cat named Ronky, whose thunderous purrs (or βronksβ in Dutch) could wake the neighbors. For 14 remarkable years, this whiskered genius supervised everything that happened in the house.
Despite battling acromegaly, Ronky maintained a proud dignity and an uncanny ability to walk across keyboards. His legacy continues in this library!
Ronky taught me important programming principles:
- Persistence: If at first you donβt succeed, meow louder until someone fixes it for you
- Efficiency: Why do something yourself when you can delegate?
- Work-Life Balance: No bug is so important that it canβt wait until after a nap
- Code Reviews: Sometimes the best feedback is just silently judging from a distance
This library aims to embody these principles by automating the tedious parts of API development so you can focus on the parts that matter β like figuring out why your application works in development but not production (itβs always CORS).
Β§π Quick Reference
Β§The Basics
-
Add
ronkyto yourCargo.toml:[dependencies] ronky = "1.0.0" # Check crates.io for the latest version -
Import the essentials:
βuse ronky::{Exported, SCHEMA_VERSION}; -
Decorate your types:
β#[derive(Exported)] struct MyType { /* fields */ } -
Export and serialize:
βlet schema = MyType::export().serialize().unwrap(); -
Profit! (This step is not automated by Ronky, sorry)
Β§Attribute Options
#[arri(strict)]- No extra properties allowed#[arri(transform = "snake_case")]- Transform enum variant names#[arri(discriminator = "type")]- Set discriminator field name#[arri(rename = "newName")]- Rename a field or variant#[arri(nullable)]- Mark a field as nullable
Β§π Final Thought
Remember: Type conversion should be like a catβs nap β automatic, elegant, and requiring no effort on your part. Let Ronky handle the tedious work while you focus on building something amazing.
Now go pet your cat (or dog, or rubber duck) β theyβve been waiting patiently while you read this documentation. β€οΈ
ModulesΒ§
StructsΒ§
- Elements
Schema - Represents the schema for elements in arri
- Empty
Schema - Represents an empty schema in the Arri system.
- Enum
Schema - Represents a schema for enumerations in the Arri system.
- Metadata
Schema - Represents metadata schema for Arri.
- Properties
Schema - Represents a schema for properties in an Arri schema.
- RefSchema
- Represents a reference schema in an Arri schema.
- Serializer
- A serializer for building JSON-like string representations.
- Tagged
Union Schema - Represents a schema for a tagged union in an Arri schema.
- Type
Schema - Represents a schema for a type in an Arri schema.
- Values
Schema - Represents a schema for values in an Arri schema.
EnumsΒ§
- Enum
Transformation - Enum representing various string transformation types.
- Types
StaticsΒ§
TraitsΒ§
- Exportable
- A trait for types that can be exported into Arri schemas.
- Serializable
- A trait for types that can be serialized into a string representation.