1use bytes::Bytes;
2use std::sync::LazyLock;
3
4use crate::{B3Digest, Directory, Node};
5
6pub const HELLOWORLD_BLOB_CONTENTS: &[u8] = b"Hello World!";
7pub const EMPTY_BLOB_CONTENTS: &[u8] = b"";
8
9pub static DUMMY_DIGEST: LazyLock<B3Digest> = LazyLock::new(|| (&[0u8; 32]).into());
10pub static DUMMY_DIGEST_2: LazyLock<B3Digest> = LazyLock::new(|| {
11 let mut u = [0u8; 32];
12 u[0] = 0x10;
13 (&u).into()
14});
15pub static DUMMY_DATA_1: LazyLock<Bytes> = LazyLock::new(|| vec![0x01, 0x02, 0x03].into());
16pub static DUMMY_DATA_2: LazyLock<Bytes> = LazyLock::new(|| vec![0x04, 0x05].into());
17
18pub static HELLOWORLD_BLOB_DIGEST: LazyLock<B3Digest> =
19 LazyLock::new(|| blake3::hash(HELLOWORLD_BLOB_CONTENTS).as_bytes().into());
20pub static EMPTY_BLOB_DIGEST: LazyLock<B3Digest> =
21 LazyLock::new(|| blake3::hash(EMPTY_BLOB_CONTENTS).as_bytes().into());
22
23pub static BLOB_A: LazyLock<Bytes> = LazyLock::new(|| vec![0x00, 0x01].into());
25pub static BLOB_A_DIGEST: LazyLock<B3Digest> =
26 LazyLock::new(|| blake3::hash(&BLOB_A).as_bytes().into());
27
28pub static BLOB_B: LazyLock<Bytes> =
30 LazyLock::new(|| (0..255).collect::<Vec<u8>>().repeat(4 * 1024).into());
31pub static BLOB_B_DIGEST: LazyLock<B3Digest> =
32 LazyLock::new(|| blake3::hash(&BLOB_B).as_bytes().into());
33
34pub static DIRECTORY_WITH_KEEP: LazyLock<Directory> = LazyLock::new(|| {
36 Directory::try_from_iter([(
37 ".keep".try_into().unwrap(),
38 Node::File {
39 digest: EMPTY_BLOB_DIGEST.clone(),
40 size: 0,
41 executable: false,
42 },
43 )])
44 .unwrap()
45});
46pub static DIRECTORY_COMPLICATED: LazyLock<Directory> = LazyLock::new(|| {
47 Directory::try_from_iter([
48 (
49 "keep".try_into().unwrap(),
50 Node::Directory {
51 digest: DIRECTORY_WITH_KEEP.digest(),
52 size: DIRECTORY_WITH_KEEP.size(),
53 },
54 ),
55 (
56 ".keep".try_into().unwrap(),
57 Node::File {
58 digest: EMPTY_BLOB_DIGEST.clone(),
59 size: 0,
60 executable: false,
61 },
62 ),
63 (
64 "aa".try_into().unwrap(),
65 Node::Symlink {
66 target: "/nix/store/somewhereelse".try_into().unwrap(),
67 },
68 ),
69 ])
70 .unwrap()
71});
72pub static DIRECTORY_A: LazyLock<Directory> = LazyLock::new(Directory::new);
73pub static DIRECTORY_B: LazyLock<Directory> = LazyLock::new(|| {
74 Directory::try_from_iter([(
75 "a".try_into().unwrap(),
76 Node::Directory {
77 digest: DIRECTORY_A.digest(),
78 size: DIRECTORY_A.size(),
79 },
80 )])
81 .unwrap()
82});
83pub static DIRECTORY_C: LazyLock<Directory> = LazyLock::new(|| {
84 Directory::try_from_iter([
85 (
86 "a".try_into().unwrap(),
87 Node::Directory {
88 digest: DIRECTORY_A.digest(),
89 size: DIRECTORY_A.size(),
90 },
91 ),
92 (
93 "a'".try_into().unwrap(),
94 Node::Directory {
95 digest: DIRECTORY_A.digest(),
96 size: DIRECTORY_A.size(),
97 },
98 ),
99 ])
100 .unwrap()
101});
102pub static DIRECTORY_D: LazyLock<Directory> = LazyLock::new(|| {
103 Directory::try_from_iter([
104 (
105 "a".try_into().unwrap(),
106 Node::Directory {
107 digest: DIRECTORY_A.digest(),
108 size: DIRECTORY_A.size(),
109 },
110 ),
111 (
112 "b".try_into().unwrap(),
113 Node::Directory {
114 digest: DIRECTORY_B.digest(),
115 size: DIRECTORY_B.size(),
116 },
117 ),
118 ])
119 .unwrap()
120});