#renames #collection #function #quick #myself

deki

A collection of crates, functions and renames tailored to myself!

2 releases

0.1.1 Nov 12, 2024
0.1.0 Nov 12, 2024

#559 in Algorithms

Download history 223/week @ 2024-11-11 24/week @ 2024-11-18

247 downloads per month

MIT/Apache

12KB
142 lines

🦀 My Rusty Base 🦀

What is this?

  • A collection of crates, functions and renames I tend to use and rate as beeing 'general purpose'.
  • A base where I don't have to look up how things works.

[!NOTE] This mainly exists so I can depend on it quick, easy and anywhere.

[!IMPORTANT] Since this crate doesn't have a specific purpose, it may change a lot between 'minor' versions. That said, I'll follow semantic versioning of course! ✨

What does it do?

  • add PhantomData alias Ghost
  • re-export maflow: all *
  • re-export type_cell: all *
  • re-export buns: self and sandwich
  • re-export derive-new: new as Constructor
    • e.g. #[derive(Constructor)] struct AStruct{field:u32} -> AStruct::new(2);
  • re-export extension-traits: extension as ext
    • e.g. #[ext(trait F32Ext)] impl f32 {fn plus(self,rhs:f32)->f32{self+rhs}} -> 4.0.plus(4.0);
  • re-export derive_more: self as derive_more and drv
    • e.g. #[derive(drv::Deref)] struct AStruct(#[deref]u32);
  • derive presets, by using derive_preset:
    • #[hashable(..)] = #[derive(PartialEq,Eq,Hash,Clone,Copy,..)]
    • #[serde(..)] = #[derive(Serialize,Deserialize,Clone,..)]
    • #[serde_hash(..)] = #[derive(Serialize,Deserialize,PartialEq,Eq,Hash,Clone,Copy,..)]
    • #[deref(..)] = #[derive(drv::Deref,drv::DerefMut,..)]
    • Note: Assuming any Hash derivator is small and therefore fine to be copied!
  • auto-impl trait marker Syncable for anything implementing 'static+Send+Sync
    • mainly used as 'rename' to use in trait bounds
  • auto-impl trait DefaultClear for anything implementing Default, id adds .clear() to set it back to default
  • auto-impl trait Lerpable for any type with necessary maths to perform linear interpolation
    • e.g. 3.0.lerp(4.0,0.1) or any future type you impl maths for
  • auto-impl trait LerpableDeref for any type that derefs to a type with necessary maths to perform linear interpolation
    • e.g. #[deref] struct AStruct(#[deref]f32); -> AStruct(3.0).lerp(AStruct(4.0),0.1)
  • extend f32 by .smooth() to apply cheap ease-in and -out (smooth-step) if within 0..=1
  • extend f32 by .clamp_unit() = .clamp(0.0,1.0)
  • extend Ramge<T> & RangeInclusive<T> by .add(T) to offset it
  • macro qonst! (quick const): set a type and a value, name is automatically set to the type name in uppercase
  • (optional) re-export fastrand: self as random
    • extend Vec by .random()
  • (optional) re-export fastapprox: all * (modified) as approx
    • extend f32 by .{operation}_ca (ca = circa (latin))

Synergies

A struct with PhantomData:

#[derive(Constructor)]
pub struct AStruct<T>(u32,#[new(default)]Ghost<T>)
// Construct somewhere:
AStruct::<String>::new(3);

Quick smooth interpolation of a struct with a f32:

#[deref(Constructor,Clone)]
struct AStruct {a:u32,#[deref]b:f32}
// run:
let from = AStruct::new(0,0.);
let to = AStruct::new(0,0.);
from.lerp(to,progress.smooth())

Dependencies

~2MB
~41K SLoC