Merge pull request #25 from TheBlueMatt/2021-04-bp-inclusion
[ldk-c-bindings] / lightning-c-bindings / src / lightning / util / logger.rs
index 037324543c1d56e6fb25352e7167eb63c049ed4f..6a21fcbefcaa84d322fc5d8c2f7171ab4b3916cb 100644 (file)
@@ -88,6 +88,21 @@ impl Level {
 pub extern "C" fn Level_clone(orig: &Level) -> Level {
        orig.clone()
 }
+/// Checks if two Levels contain equal inner contents.
+/// This ignores pointers and is_owned flags and looks at the values in fields.
+#[no_mangle]
+pub extern "C" fn Level_eq(a: &Level, b: &Level) -> bool {
+       if &a.to_native() == &b.to_native() { true } else { false }
+}
+/// Checks if two Levels contain equal inner contents.
+#[no_mangle]
+pub extern "C" fn Level_hash(o: &Level) -> u64 {
+       // Note that we'd love to use std::collections::hash_map::DefaultHasher but it's not in core
+       #[allow(deprecated)]
+       let mut hasher = core::hash::SipHasher::new();
+       std::hash::Hash::hash(&o.to_native(), &mut hasher);
+       std::hash::Hasher::finish(&hasher)
+}
 /// Returns the most verbose logging level.
 #[must_use]
 #[no_mangle]
@@ -108,6 +123,8 @@ pub struct Logger {
        /// Does not need to free the outer struct containing function pointers and may be NULL is no resources need to be freed.
        pub free: Option<extern "C" fn(this_arg: *mut c_void)>,
 }
+unsafe impl Send for Logger {}
+unsafe impl Sync for Logger {}
 
 use lightning::util::logger::Logger as rustLogger;
 impl rustLogger for Logger {