Commit 3f3bb7a

mo khan <mo@mokhan.ca>
2025-06-20 17:33:25
feat: add build and build_with functions
1 parent 8f74196
Changed files (2)
src/lib.rs
@@ -1,14 +1,43 @@
-pub fn add(left: u64, right: u64) -> u64 {
-    left + right
+pub fn build<T: Default>() -> T {
+    T::default()
+}
+
+pub fn build_with<T, F>(initializer: F) -> T
+where
+    T: Default,
+    F: std::ops::FnOnce(&mut T),
+{
+    let mut item = build::<T>();
+    initializer(&mut item);
+    item
 }
 
 #[cfg(test)]
 mod tests {
     use super::*;
 
+    #[derive(Default)]
+    struct Person {
+        name: String,
+        age: i32,
+    }
+
     #[test]
-    fn it_works() {
-        let result = add(2, 2);
-        assert_eq!(result, 4);
+    fn build_test_it_builds_a_new_instance_with_default_values() {
+        let item = build::<Person>();
+
+        assert_eq!(item.name, "");
+        assert_eq!(item.age, 0);
+    }
+
+    #[test]
+    fn build_with_test_initializes_the_new_instance() {
+        let item = build_with(|item: &mut Person| {
+            item.name = String::from("pidge");
+            item.age = 42;
+        });
+
+        assert_eq!(item.name, "pidge");
+        assert_eq!(item.age, 42);
     }
 }
Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "please"
+version = "0.1.0"