feat(chain)!: add take
convenience method to Append
trait
This is useful if the caller wishes to use the type as a staging area. This is breaking as `Append` has a `Default` bound now.
This commit is contained in:
parent
1eca568be5
commit
feb27df180
@ -114,12 +114,21 @@ pub trait AnchorFromBlockPosition: Anchor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Trait that makes an object appendable.
|
/// Trait that makes an object appendable.
|
||||||
pub trait Append {
|
pub trait Append: Default {
|
||||||
/// Append another object of the same type onto `self`.
|
/// Append another object of the same type onto `self`.
|
||||||
fn append(&mut self, other: Self);
|
fn append(&mut self, other: Self);
|
||||||
|
|
||||||
/// Returns whether the structure is considered empty.
|
/// Returns whether the structure is considered empty.
|
||||||
fn is_empty(&self) -> bool;
|
fn is_empty(&self) -> bool;
|
||||||
|
|
||||||
|
/// Take the value, replacing it with the default value.
|
||||||
|
fn take(&mut self) -> Option<Self> {
|
||||||
|
if self.is_empty() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(core::mem::take(self))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<K: Ord, V> Append for BTreeMap<K, V> {
|
impl<K: Ord, V> Append for BTreeMap<K, V> {
|
||||||
|
@ -2291,11 +2291,7 @@ impl Wallet {
|
|||||||
|
|
||||||
/// Take the staged [`ChangeSet`] to be persisted now (if any).
|
/// Take the staged [`ChangeSet`] to be persisted now (if any).
|
||||||
pub fn take_staged(&mut self) -> Option<ChangeSet> {
|
pub fn take_staged(&mut self) -> Option<ChangeSet> {
|
||||||
if self.stage.is_empty() {
|
self.stage.take()
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(core::mem::take(&mut self.stage))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get a reference to the inner [`TxGraph`].
|
/// Get a reference to the inner [`TxGraph`].
|
||||||
|
@ -196,8 +196,8 @@ fn main() -> anyhow::Result<()> {
|
|||||||
if last_db_commit.elapsed() >= DB_COMMIT_DELAY {
|
if last_db_commit.elapsed() >= DB_COMMIT_DELAY {
|
||||||
let db = &mut *db.lock().unwrap();
|
let db = &mut *db.lock().unwrap();
|
||||||
last_db_commit = Instant::now();
|
last_db_commit = Instant::now();
|
||||||
if !db_stage.is_empty() {
|
if let Some(changeset) = db_stage.take() {
|
||||||
db.append_changeset(&core::mem::take(&mut db_stage))?;
|
db.append_changeset(&changeset)?;
|
||||||
}
|
}
|
||||||
println!(
|
println!(
|
||||||
"[{:>10}s] committed to db (took {}s)",
|
"[{:>10}s] committed to db (took {}s)",
|
||||||
@ -235,8 +235,8 @@ fn main() -> anyhow::Result<()> {
|
|||||||
{
|
{
|
||||||
let db = &mut *db.lock().unwrap();
|
let db = &mut *db.lock().unwrap();
|
||||||
db_stage.append((local_chain::ChangeSet::default(), graph_changeset));
|
db_stage.append((local_chain::ChangeSet::default(), graph_changeset));
|
||||||
if !db_stage.is_empty() {
|
if let Some(changeset) = db_stage.take() {
|
||||||
db.append_changeset(&core::mem::take(&mut db_stage))?;
|
db.append_changeset(&changeset)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -325,8 +325,8 @@ fn main() -> anyhow::Result<()> {
|
|||||||
if last_db_commit.elapsed() >= DB_COMMIT_DELAY {
|
if last_db_commit.elapsed() >= DB_COMMIT_DELAY {
|
||||||
let db = &mut *db.lock().unwrap();
|
let db = &mut *db.lock().unwrap();
|
||||||
last_db_commit = Instant::now();
|
last_db_commit = Instant::now();
|
||||||
if !db_stage.is_empty() {
|
if let Some(changeset) = db_stage.take() {
|
||||||
db.append_changeset(&core::mem::take(&mut db_stage))?;
|
db.append_changeset(&changeset)?;
|
||||||
}
|
}
|
||||||
println!(
|
println!(
|
||||||
"[{:>10}s] committed to db (took {}s)",
|
"[{:>10}s] committed to db (took {}s)",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user