Files
proxmox-backup/src/tape/media_set.rs
Thomas Lamprecht d1d74c4367 typo fixes all over the place
found and semi-manually replaced by using:
 codespell -L mut -L crate -i 3 -w

Mostly in comments, but also email notification and two occurrences
of misspelled  'reserved' struct member, which where not used and
cargo build did not complain about the change, soo ...

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2021-03-10 16:39:57 +01:00

77 lines
2.0 KiB
Rust

use anyhow::{bail, Error};
use serde::{Serialize, Deserialize};
use proxmox::tools::Uuid;
/// MediaSet - Ordered group of media
#[derive(Debug, Serialize, Deserialize)]
pub struct MediaSet {
/// Unique media set ID
uuid: Uuid,
/// List of member media IDs
media_list: Vec<Option<Uuid>>,
}
impl MediaSet {
pub const MEDIA_SET_MAX_SEQ_NR: u64 = 100;
pub fn new() -> Self {
let uuid = Uuid::generate();
Self {
uuid,
media_list: Vec::new(),
}
}
pub fn with_data(uuid: Uuid, media_list: Vec<Option<Uuid>>) -> Self {
Self { uuid, media_list }
}
pub fn uuid(&self) -> &Uuid {
&self.uuid
}
pub fn media_list(&self) -> &[Option<Uuid>] {
&self.media_list
}
pub fn add_media(&mut self, uuid: Uuid) {
self.media_list.push(Some(uuid));
}
pub fn insert_media(&mut self, uuid: Uuid, seq_nr: u64) -> Result<(), Error> {
if seq_nr > Self::MEDIA_SET_MAX_SEQ_NR {
bail!("media set sequence number to large in media set {} ({} > {})",
self.uuid.to_string(), seq_nr, Self::MEDIA_SET_MAX_SEQ_NR);
}
let seq_nr = seq_nr as usize;
if self.media_list.len() > seq_nr {
if self.media_list[seq_nr].is_some() {
bail!("found duplicate sequence number in media set '{}/{}'",
self.uuid.to_string(), seq_nr);
}
} else {
self.media_list.resize(seq_nr + 1, None);
}
self.media_list[seq_nr] = Some(uuid);
Ok(())
}
pub fn last_media_uuid(&self) -> Option<&Uuid> {
match self.media_list.last() {
None => None,
Some(None) => None,
Some(Some(ref last_uuid)) => Some(last_uuid),
}
}
pub fn is_last_media(&self, uuid: &Uuid) -> bool {
match self.media_list.last() {
None => false,
Some(None) => false,
Some(Some(last_uuid)) => uuid == last_uuid,
}
}
}