extern crate alloc;
mod ops;
mod types;
pub use ops::*;
pub use types::*;
use alloc::string::String;
use alloc::vec::Vec;
pub struct Streams;
impl Streams {
pub fn list(dataset: &str, object_id: u64) -> Result<Vec<StreamInfo>, StreamError> {
list_streams(dataset, object_id)
}
pub fn exists(dataset: &str, object_id: u64, stream_name: &str) -> Result<bool, StreamError> {
stream_exists(dataset, object_id, stream_name)
}
pub fn info(
dataset: &str,
object_id: u64,
stream_name: &str,
) -> Result<StreamInfo, StreamError> {
get_stream_info(dataset, object_id, stream_name)
}
pub fn create(
dataset: &str,
object_id: u64,
stream_name: &str,
stream_type: StreamType,
) -> Result<(), StreamError> {
create_stream(dataset, object_id, stream_name, stream_type)
}
pub fn delete(dataset: &str, object_id: u64, stream_name: &str) -> Result<(), StreamError> {
delete_stream(dataset, object_id, stream_name)
}
pub fn read(
dataset: &str,
object_id: u64,
stream_name: &str,
offset: u64,
length: usize,
) -> Result<Vec<u8>, StreamError> {
read_stream(dataset, object_id, stream_name, offset, length)
}
pub fn write(
dataset: &str,
object_id: u64,
stream_name: &str,
offset: u64,
data: &[u8],
) -> Result<usize, StreamError> {
write_stream(dataset, object_id, stream_name, offset, data)
}
pub fn truncate(
dataset: &str,
object_id: u64,
stream_name: &str,
length: u64,
) -> Result<(), StreamError> {
truncate_stream(dataset, object_id, stream_name, length)
}
pub fn rename(
dataset: &str,
object_id: u64,
old_name: &str,
new_name: &str,
) -> Result<(), StreamError> {
rename_stream(dataset, object_id, old_name, new_name)
}
pub fn copy(
src_dataset: &str,
src_id: u64,
src_stream: &str,
dst_dataset: &str,
dst_id: u64,
dst_stream: &str,
) -> Result<u64, StreamError> {
copy_stream(
src_dataset,
src_id,
src_stream,
dst_dataset,
dst_id,
dst_stream,
)
}
pub fn total_size(dataset: &str, object_id: u64) -> Result<u64, StreamError> {
get_total_stream_size(dataset, object_id)
}
pub fn parse_path(path: &str) -> ParsedStreamPath {
parse_stream_path(path)
}
pub fn build_path(file_path: &str, stream_name: &str) -> String {
build_stream_path(file_path, stream_name)
}
}
pub mod well_known {
pub const ZONE_IDENTIFIER: &str = "Zone.Identifier";
pub const THUMBNAIL: &str = "Thumbnail";
pub const ICON: &str = "Icon";
pub const SUMMARY_INFO: &str = "SummaryInformation";
pub const DOC_SUMMARY: &str = "DocumentSummaryInformation";
pub const ENCRYPTED: &str = "Encrypted";
pub const VERSION_HISTORY: &str = "VersionHistory";
pub const RESOURCE_FORK: &str = "ResourceFork";
pub const XATTR: &str = "XAttr";
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_parse_path() {
let parsed = Streams::parse_path("/data/file.txt:stream_name");
assert_eq!(parsed.file_path, "/data/file.txt");
assert_eq!(parsed.stream_name.as_deref(), Some("stream_name"));
}
#[test]
fn test_build_path() {
let path = Streams::build_path("/data/file.txt", "metadata");
assert_eq!(path, "/data/file.txt:metadata");
}
}