1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
// Auto generated dependencies
// If you find issues with the dependencies, please
// 1. Delete all code after this comment
// 2. Clear the auto generated part in `policy/_policies/Cargo.toml`
// 3. Run `cargo run --bin butckrepo-refresh` in the Butchunker root directory
pub mod error;
pub mod stream_read;
use error::ChunkFailed;
use std::{collections::HashMap, path::Path};
use crate::stream_read::chunk_stream_process;
/// Chunks the specified raw data using the specified chunking policy
///
/// # Parameters
/// - `policy_name`: Chunking policy name, currently supports <<<policy_count>>> policies
/// - `raw_data`: Raw data byte slice
/// - `params`: Hashmap of parameters required by the chunking policy
pub async fn chunk_with(
policy_name: &str,
raw_data: &[u8],
params: &HashMap<&str, &str>,
) -> Result<Vec<u32>, ChunkFailed> {
match policy_name {
>>>>>>>>>> match_arms
_ => Err(ChunkFailed::PolicyNotFound),
}
}
pub async fn chunk_stream_with<F>(
policy_name: &str,
size: u32,
path: &Path,
callback: F,
params: &HashMap<&str, &str>,
) -> Result<(), ChunkFailed>
where
F: FnMut(Vec<u8>) -> std::pin::Pin<Box<dyn std::future::Future<Output = Result<(), std::io::Error>> + Send>>,
{
match policy_name {
>>>>>>>>>> match_arms_stream
_ => Err(ChunkFailed::PolicyNotFound),
}
}
pub async fn chunk_stream_display_boundaries(
policy_name: &str,
size: u32,
path: &Path,
params: &HashMap<&str, &str>,
) -> Result<Vec<u32>, ChunkFailed> {
match policy_name {
>>>>>>>>>> match_arms_stream_display
_ => Err(ChunkFailed::PolicyNotFound),
}
}
pub fn policies() -> Vec<&'static str> {
vec![
>>>>>>>>>> policy_names
]
}
pub fn stream_policies() -> Vec<&'static str> {
vec![
>>>>>>>>>> stream_policy_names
]
}
>>>>>>>>>> exports_simple
>>>>>>>>>> exports_stream
>>>>>>>>>> exports_both
@@@ >>> match_arms
"<<<crate_name>>>" => Ok(<<<crate_name>>>::chunk(raw_data, params).await),
@@@ <<<
@@@ >>> match_arms_stream
"<<<crate_name>>>" => {
let mut stream = <<<stream_struct_id>>>::default();
chunk_stream_process(
path, &mut stream, size, callback, params,
async |current_data, len, stream, params| {
<<<crate_name>>>::chunk_stream(current_data, len, stream, params).await
},
)
.await
}
@@@ <<<
@@@ >>> match_arms_stream_display
"<<<crate_name>>>" => {
let mut stream = <<<stream_struct_id>>>::default();
crate::stream_read::chunk_stream_display_boundaries(
path, &mut stream, size, params,
async |current_data, len, stream, params| {
<<<crate_name>>>::chunk_stream(current_data, len, stream, params).await
},
)
.await
}
@@@ <<<
@@@ >>> policy_names
// <<<name>>>
"<<<name>>>",
@@@ <<<
@@@ >>> stream_policy_names
// <<<name>>>
"<<<name>>>",
@@@ <<<
@@@ >>> exports_simple
pub mod <<<crate_name>>> {
use std::collections::HashMap;
pub async fn chunk(raw_data: &[u8], params: &HashMap<&str, &str>) -> Vec<u32> {
<<<crate_name>>>::<<<matched_func>>>(raw_data, params)<<<has_await>>>
}
}
@@@ <<<
@@@ >>> exports_stream
pub mod <<<crate_name>>> {
pub use <<<stream_struct_id>>>;
pub async fn chunk_stream(
current_data: &[u8],
len: u32,
stream: &mut <<<stream_struct_id>>>,
params: &std::collections::HashMap<&str, &str>,
) -> Option<u32> {
<<<crate_name>>>::<<<matched_func_stream>>>(current_data, len, stream, params)<<<has_await_stream>>>
}
}
@@@ <<<
@@@ >>> exports_both
pub mod <<<crate_name>>> {
pub use <<<stream_struct_id>>>;
use std::collections::HashMap;
pub async fn chunk(raw_data: &[u8], params: &HashMap<&str, &str>) -> Vec<u32> {
<<<crate_name>>>::<<<matched_func>>>(raw_data, params)<<<has_await>>>
}
pub async fn chunk_stream(
current_data: &[u8],
len: u32,
stream: &mut <<<stream_struct_id>>>,
params: &HashMap<&str, &str>,
) -> Option<u32> {
<<<crate_name>>>::<<<matched_func_stream>>>(current_data, len, stream, params)<<<has_await_stream>>>
}
}
@@@ <<<
|