about summary refs log tree commit diff
path: root/tvix/castore/src/fixtures.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tvix/castore/src/fixtures.rs')
-rw-r--r--tvix/castore/src/fixtures.rs189
1 files changed, 103 insertions, 86 deletions
diff --git a/tvix/castore/src/fixtures.rs b/tvix/castore/src/fixtures.rs
index 3ebda64a818a..db0ee59daf60 100644
--- a/tvix/castore/src/fixtures.rs
+++ b/tvix/castore/src/fixtures.rs
@@ -1,103 +1,120 @@
-use crate::{
-    proto::{self, Directory, DirectoryNode, FileNode, SymlinkNode},
-    B3Digest,
-};
-use lazy_static::lazy_static;
+use bytes::Bytes;
+use std::sync::LazyLock;
+
+use crate::{B3Digest, Directory, Node};
 
 pub const HELLOWORLD_BLOB_CONTENTS: &[u8] = b"Hello World!";
 pub const EMPTY_BLOB_CONTENTS: &[u8] = b"";
 
-lazy_static! {
-    pub static ref DUMMY_DIGEST: B3Digest = {
-        let u = [0u8; 32];
-        (&u).into()
-    };
-    pub static ref DUMMY_DIGEST_2: B3Digest = {
-        let mut u = [0u8; 32];
-        u[0] = 0x10;
-        (&u).into()
-    };
-    pub static ref DUMMY_DATA_1: bytes::Bytes = vec![0x01, 0x02, 0x03].into();
-    pub static ref DUMMY_DATA_2: bytes::Bytes = vec![0x04, 0x05].into();
+pub static DUMMY_DIGEST: LazyLock<B3Digest> = LazyLock::new(|| (&[0u8; 32]).into());
+pub static DUMMY_DIGEST_2: LazyLock<B3Digest> = LazyLock::new(|| {
+    let mut u = [0u8; 32];
+    u[0] = 0x10;
+    (&u).into()
+});
+pub static DUMMY_DATA_1: LazyLock<Bytes> = LazyLock::new(|| vec![0x01, 0x02, 0x03].into());
+pub static DUMMY_DATA_2: LazyLock<Bytes> = LazyLock::new(|| vec![0x04, 0x05].into());
 
-    pub static ref HELLOWORLD_BLOB_DIGEST: B3Digest =
-        blake3::hash(HELLOWORLD_BLOB_CONTENTS).as_bytes().into();
-    pub static ref EMPTY_BLOB_DIGEST: B3Digest =
-        blake3::hash(EMPTY_BLOB_CONTENTS).as_bytes().into();
+pub static HELLOWORLD_BLOB_DIGEST: LazyLock<B3Digest> =
+    LazyLock::new(|| blake3::hash(HELLOWORLD_BLOB_CONTENTS).as_bytes().into());
+pub static EMPTY_BLOB_DIGEST: LazyLock<B3Digest> =
+    LazyLock::new(|| blake3::hash(EMPTY_BLOB_CONTENTS).as_bytes().into());
 
-    // 2 bytes
-    pub static ref BLOB_A: bytes::Bytes = vec![0x00, 0x01].into();
-    pub static ref BLOB_A_DIGEST: B3Digest = blake3::hash(&BLOB_A).as_bytes().into();
+// 2 bytes
+pub static BLOB_A: LazyLock<Bytes> = LazyLock::new(|| vec![0x00, 0x01].into());
+pub static BLOB_A_DIGEST: LazyLock<B3Digest> =
+    LazyLock::new(|| blake3::hash(&BLOB_A).as_bytes().into());
 
-    // 1MB
-    pub static ref BLOB_B: bytes::Bytes = (0..255).collect::<Vec<u8>>().repeat(4 * 1024).into();
-    pub static ref BLOB_B_DIGEST: B3Digest = blake3::hash(&BLOB_B).as_bytes().into();
+// 1MB
+pub static BLOB_B: LazyLock<Bytes> =
+    LazyLock::new(|| (0..255).collect::<Vec<u8>>().repeat(4 * 1024).into());
+pub static BLOB_B_DIGEST: LazyLock<B3Digest> =
+    LazyLock::new(|| blake3::hash(&BLOB_B).as_bytes().into());
 
-    // Directories
-    pub static ref DIRECTORY_WITH_KEEP: proto::Directory = proto::Directory {
-        directories: vec![],
-        files: vec![FileNode {
-            name: b".keep".to_vec().into(),
-            digest: EMPTY_BLOB_DIGEST.clone().into(),
-            size: 0,
-            executable: false,
-        }],
-        symlinks: vec![],
-    };
-    pub static ref DIRECTORY_COMPLICATED: proto::Directory = proto::Directory {
-        directories: vec![DirectoryNode {
-            name: b"keep".to_vec().into(),
-            digest: DIRECTORY_WITH_KEEP.digest().into(),
-            size: DIRECTORY_WITH_KEEP.size(),
-        }],
-        files: vec![FileNode {
-            name: b".keep".to_vec().into(),
-            digest: EMPTY_BLOB_DIGEST.clone().into(),
+// Directories
+pub static DIRECTORY_WITH_KEEP: LazyLock<Directory> = LazyLock::new(|| {
+    Directory::try_from_iter([(
+        ".keep".try_into().unwrap(),
+        Node::File {
+            digest: EMPTY_BLOB_DIGEST.clone(),
             size: 0,
             executable: false,
-        }],
-        symlinks: vec![SymlinkNode {
-            name: b"aa".to_vec().into(),
-            target: b"/nix/store/somewhereelse".to_vec().into(),
-        }],
-    };
-    pub static ref DIRECTORY_A: Directory = Directory::default();
-    pub static ref DIRECTORY_B: Directory = Directory {
-        directories: vec![DirectoryNode {
-            name: b"a".to_vec().into(),
-            digest: DIRECTORY_A.digest().into(),
+        },
+    )])
+    .unwrap()
+});
+pub static DIRECTORY_COMPLICATED: LazyLock<Directory> = LazyLock::new(|| {
+    Directory::try_from_iter([
+        (
+            "keep".try_into().unwrap(),
+            Node::Directory {
+                digest: DIRECTORY_WITH_KEEP.digest(),
+                size: DIRECTORY_WITH_KEEP.size(),
+            },
+        ),
+        (
+            ".keep".try_into().unwrap(),
+            Node::File {
+                digest: EMPTY_BLOB_DIGEST.clone(),
+                size: 0,
+                executable: false,
+            },
+        ),
+        (
+            "aa".try_into().unwrap(),
+            Node::Symlink {
+                target: "/nix/store/somewhereelse".try_into().unwrap(),
+            },
+        ),
+    ])
+    .unwrap()
+});
+pub static DIRECTORY_A: LazyLock<Directory> = LazyLock::new(Directory::new);
+pub static DIRECTORY_B: LazyLock<Directory> = LazyLock::new(|| {
+    Directory::try_from_iter([(
+        "a".try_into().unwrap(),
+        Node::Directory {
+            digest: DIRECTORY_A.digest(),
             size: DIRECTORY_A.size(),
-        }],
-        ..Default::default()
-    };
-    pub static ref DIRECTORY_C: Directory = Directory {
-        directories: vec![
-            DirectoryNode {
-                name: b"a".to_vec().into(),
-                digest: DIRECTORY_A.digest().into(),
+        },
+    )])
+    .unwrap()
+});
+pub static DIRECTORY_C: LazyLock<Directory> = LazyLock::new(|| {
+    Directory::try_from_iter([
+        (
+            "a".try_into().unwrap(),
+            Node::Directory {
+                digest: DIRECTORY_A.digest(),
                 size: DIRECTORY_A.size(),
             },
-            DirectoryNode {
-                name: b"a'".to_vec().into(),
-                digest: DIRECTORY_A.digest().into(),
+        ),
+        (
+            "a'".try_into().unwrap(),
+            Node::Directory {
+                digest: DIRECTORY_A.digest(),
                 size: DIRECTORY_A.size(),
-            }
-        ],
-        ..Default::default()
-    };
-    pub static ref DIRECTORY_D: proto::Directory = proto::Directory {
-        directories: vec![
-            DirectoryNode {
-                name: b"a".to_vec().into(),
-                digest: DIRECTORY_A.digest().into(),
+            },
+        ),
+    ])
+    .unwrap()
+});
+pub static DIRECTORY_D: LazyLock<Directory> = LazyLock::new(|| {
+    Directory::try_from_iter([
+        (
+            "a".try_into().unwrap(),
+            Node::Directory {
+                digest: DIRECTORY_A.digest(),
                 size: DIRECTORY_A.size(),
             },
-            DirectoryNode {
-                name: b"b'".to_vec().into(),
-                digest: DIRECTORY_B.digest().into(),
+        ),
+        (
+            "b".try_into().unwrap(),
+            Node::Directory {
+                digest: DIRECTORY_B.digest(),
                 size: DIRECTORY_B.size(),
-            }
-        ],
-        ..Default::default()
-    };
-}
+            },
+        ),
+    ])
+    .unwrap()
+});