use serde_yml::libyml::util::{InitPtr, Owned};
use std::mem::MaybeUninit;
use std::ops::Deref;
pub(crate) fn main() {
println!("\n❯ Executing examples/libyml/util_examples.rs");
let uninit_owned: Owned<MaybeUninit<i32>, i32> =
Owned::new_uninit();
println!(
"\n✅ Created a new uninitialized Owned instance: {:?}",
uninit_owned
);
let init_owned: Owned<i32> =
unsafe { Owned::assume_init(uninit_owned) };
println!(
"\n✅ Converted to an initialized Owned instance: {:?}",
init_owned
);
let init_ptr = init_owned.deref().ptr;
println!(
"\n✅ Dereferenced the Owned instance to get the InitPtr: {:?}",
init_ptr
);
let mut value: i32 = 42;
let init_ptr = InitPtr { ptr: &mut value };
println!(
"\n✅ Created an InitPtr instance: {:?} with value: {}",
init_ptr,
unsafe { *init_ptr.ptr }
);
{
let drop_owned: Owned<MaybeUninit<i32>, i32> =
Owned::new_uninit();
println!(
"\n✅ Created a new Owned instance to be dropped: {:?}",
drop_owned
);
}
let uninit_owned_f64: Owned<MaybeUninit<f64>, f64> =
Owned::new_uninit();
println!(
"\n✅ Created a new uninitialized Owned<f64> instance: {:?}",
uninit_owned_f64
);
let init_owned_f64: Owned<f64> =
unsafe { Owned::assume_init(uninit_owned_f64) };
println!(
"\n✅ Converted to an initialized Owned<f64> instance: {:?}",
init_owned_f64
);
}