Viewing: llapi-test.rs
// SPDX-License-Identifier: MIT
// Copyright (c) 2025 DDN. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
use clap::Parser;
use rustreapi::{Error, Layout, LayoutGetFlags, SingleLayout, file_get_mdtidx, get_layout};
use std::{fmt, io::Write, path::PathBuf};
#[derive(Parser, Debug)]
#[clap(version, about, name = "walk")]
struct Args {
#[clap(default_value = "./testfile")]
path: PathBuf,
#[clap(short, long)]
create: bool,
}
struct LayoutList(Vec<SingleLayout>);
impl fmt::Display for LayoutList {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
for layout in &self.0 {
write!(f, "{layout}\n\n")?;
}
Ok(())
}
}
fn main() {
match run() {
Ok(_) => (),
Err(e) => {
eprintln!("Error: {e}");
std::process::exit(1);
}
}
}
fn run() -> Result<(), Error> {
let args = Args::parse();
if args.create {
let layout = Layout::new();
layout.stripe_count(4)?.stripe_size(1024 * 1024)?;
println!("layout: {:?}", &layout);
let mut f = rustreapi::OpenOptions::new()
.write(true)
.read(true)
.create_new(true)
.layout(layout)
.open(&args.path)?;
println!("create f: {:?}", &f);
let _ = f.write("hello world\n".as_bytes())?;
}
let mdtidx = file_get_mdtidx(&args.path)?;
println!("mdt idx: {mdtidx}");
let layout = get_layout(&args.path, LayoutGetFlags::NONE)?;
println!("{:?} layout:\n{}", &*args.path, &LayoutList(layout));
let l = Layout::with_path(&args.path, LayoutGetFlags::NONE)?;
println!("{:?} layout:\n{}", &*args.path, l);
Ok(())
}