impl Clone for SimpleProgressBar {
fn clone(&self) -> Self {
Self {
message: Arc::clone(&self.message),
position: Arc::clone(&self.position),
length: Arc::clone(&self.length),
hidden: self.hidden,
}
}
}
impl SimpleProgressBar {
#[must_use]
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn new(len: u64) -> Self {
Self {
message: Arc::new(Mutex::new(String::new())),
position: Arc::new(AtomicU64::new(0)),
length: Arc::new(AtomicU64::new(len)),
hidden: false,
}
}
#[must_use]
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn new_spinner() -> Self {
Self::new(0)
}
#[must_use]
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn hidden() -> Self {
Self {
message: Arc::new(Mutex::new(String::new())),
position: Arc::new(AtomicU64::new(0)),
length: Arc::new(AtomicU64::new(0)),
hidden: true,
}
}
#[must_use]
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn is_hidden(&self) -> bool {
self.hidden
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn set_message(&self, msg: impl Into<String>) {
if let Ok(mut m) = self.message.lock() {
*m = msg.into();
}
}
#[must_use]
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn message(&self) -> String {
self.message.lock().map(|m| m.clone()).unwrap_or_default()
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn set_position(&self, pos: u64) {
self.position.store(pos, Ordering::Relaxed);
}
#[must_use]
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn position(&self) -> u64 {
self.position.load(Ordering::Relaxed)
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn inc(&self, delta: u64) {
self.position.fetch_add(delta, Ordering::Relaxed);
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn set_length(&self, len: u64) {
self.length.store(len, Ordering::Relaxed);
}
#[must_use]
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn length(&self) -> Option<u64> {
let len = self.length.load(Ordering::Relaxed);
if len > 0 {
Some(len)
} else {
None
}
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn finish_with_message(&self, msg: impl Into<String>) {
if !self.hidden {
eprintln!("{}", msg.into());
}
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn finish(&self) {
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn finish_and_clear(&self) {
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn abandon(&self) {
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn abandon_with_message(&self, msg: impl Into<String>) {
if !self.hidden {
eprintln!("{}", msg.into());
}
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn enable_steady_tick(&self, _duration: std::time::Duration) {
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn tick(&self) {
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn set_style(&self, _style: SimpleProgressStyle) {
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn println(&self, msg: impl AsRef<str>) {
if !self.hidden {
eprintln!("{}", msg.as_ref());
}
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn suspend<F: FnOnce() -> R, R>(&self, f: F) -> R {
f()
}
}