diff --git a/bindings/nostr-ffi/src/lib.rs b/bindings/nostr-ffi/src/lib.rs index 7547b47c2..87851ae86 100644 --- a/bindings/nostr-ffi/src/lib.rs +++ b/bindings/nostr-ffi/src/lib.rs @@ -4,6 +4,8 @@ //! Nostr FFI +#![allow(clippy::new_without_default)] + use std::sync::Arc; use uniffi::Object; diff --git a/bindings/nostr-ffi/src/types/contact.rs b/bindings/nostr-ffi/src/types/contact.rs index 5df1c7569..f643ab6bb 100644 --- a/bindings/nostr-ffi/src/types/contact.rs +++ b/bindings/nostr-ffi/src/types/contact.rs @@ -5,42 +5,42 @@ use std::ops::Deref; use std::sync::Arc; -use nostr::{Contact as ContactSdk, UncheckedUrl}; +use nostr::UncheckedUrl; use uniffi::Object; use crate::PublicKey; #[derive(Object)] pub struct Contact { - contact: ContactSdk, + inner: nostr::Contact, } impl Deref for Contact { - type Target = ContactSdk; + type Target = nostr::Contact; fn deref(&self) -> &Self::Target { - &self.contact + &self.inner } } #[uniffi::export] impl Contact { #[uniffi::constructor] - pub fn new(pk: Arc, relay_url: Option, alias: Option) -> Arc { + pub fn new(pk: Arc, relay_url: Option, alias: Option) -> Self { let relay_url = relay_url.map(|relay_url| UncheckedUrl::from(&relay_url)); - Arc::new(Self { - contact: ContactSdk::new(**pk, relay_url, alias), - }) + Self { + inner: nostr::Contact::new(**pk, relay_url, alias), + } } pub fn alias(&self) -> Option { - self.contact.alias.clone() + self.inner.alias.clone() } pub fn public_key(&self) -> Arc { - Arc::new(self.contact.pk.into()) + Arc::new(self.inner.pk.into()) } pub fn relay_url(&self) -> Option { - self.contact.relay_url.clone().map(|u| u.to_string()) + self.inner.relay_url.clone().map(|u| u.to_string()) } } diff --git a/bindings/nostr-ffi/src/types/image.rs b/bindings/nostr-ffi/src/types/image.rs index be31221df..0ae4d8727 100644 --- a/bindings/nostr-ffi/src/types/image.rs +++ b/bindings/nostr-ffi/src/types/image.rs @@ -2,8 +2,6 @@ // Copyright (c) 2023-2024 Rust Nostr Developers // Distributed under the MIT software license -use std::sync::Arc; - use uniffi::Object; #[derive(Object)] @@ -32,10 +30,10 @@ impl From<&ImageDimensions> for nostr::ImageDimensions { #[uniffi::export] impl ImageDimensions { #[uniffi::constructor] - pub fn new(width: u64, height: u64) -> Arc { - Arc::new(Self { + pub fn new(width: u64, height: u64) -> Self { + Self { inner: nostr::ImageDimensions { width, height }, - }) + } } pub fn width(&self) -> u64 { diff --git a/bindings/nostr-ffi/src/types/metadata.rs b/bindings/nostr-ffi/src/types/metadata.rs index 2709d4c80..8132d1781 100644 --- a/bindings/nostr-ffi/src/types/metadata.rs +++ b/bindings/nostr-ffi/src/types/metadata.rs @@ -32,120 +32,120 @@ impl From for Metadata { #[uniffi::export] impl Metadata { #[uniffi::constructor] - pub fn new() -> Arc { - Arc::new(Self { + pub fn new() -> Self { + Self { inner: nostr::Metadata::new(), - }) + } } #[uniffi::constructor] - pub fn from_json(json: String) -> Result> { - Ok(Arc::new(Self { + pub fn from_json(json: String) -> Result { + Ok(Self { inner: nostr::Metadata::from_json(json)?, - })) + }) } pub fn as_json(&self) -> String { self.inner.as_json() } - pub fn set_name(self: Arc, name: String) -> Arc { + pub fn set_name(self: Arc, name: String) -> Self { let mut builder = unwrap_or_clone_arc(self); builder.inner = builder.inner.name(name); - Arc::new(builder) + builder } pub fn get_name(&self) -> Option { self.inner.name.clone() } - pub fn set_display_name(self: Arc, display_name: String) -> Arc { + pub fn set_display_name(self: Arc, display_name: String) -> Self { let mut builder = unwrap_or_clone_arc(self); builder.inner = builder.inner.display_name(display_name); - Arc::new(builder) + builder } pub fn get_display_name(&self) -> Option { self.inner.display_name.clone() } - pub fn set_about(self: Arc, about: String) -> Arc { + pub fn set_about(self: Arc, about: String) -> Self { let mut builder = unwrap_or_clone_arc(self); builder.inner = builder.inner.about(about); - Arc::new(builder) + builder } pub fn get_about(&self) -> Option { self.inner.about.clone() } - pub fn set_website(self: Arc, website: String) -> Result> { + pub fn set_website(self: Arc, website: String) -> Result { let website = Url::parse(&website)?; let mut builder = unwrap_or_clone_arc(self); builder.inner = builder.inner.website(website); - Ok(Arc::new(builder)) + Ok(builder) } pub fn get_website(&self) -> Option { self.inner.website.clone() } - pub fn set_picture(self: Arc, picture: String) -> Result> { + pub fn set_picture(self: Arc, picture: String) -> Result { let picture = Url::parse(&picture)?; let mut builder = unwrap_or_clone_arc(self); builder.inner = builder.inner.picture(picture); - Ok(Arc::new(builder)) + Ok(builder) } pub fn get_picture(&self) -> Option { self.inner.picture.clone() } - pub fn set_banner(self: Arc, banner: String) -> Result> { + pub fn set_banner(self: Arc, banner: String) -> Result { let banner = Url::parse(&banner)?; let mut builder = unwrap_or_clone_arc(self); builder.inner = builder.inner.banner(banner); - Ok(Arc::new(builder)) + Ok(builder) } pub fn get_banner(&self) -> Option { self.inner.banner.clone() } - pub fn set_nip05(self: Arc, nip05: String) -> Arc { + pub fn set_nip05(self: Arc, nip05: String) -> Self { let mut builder = unwrap_or_clone_arc(self); builder.inner = builder.inner.nip05(nip05); - Arc::new(builder) + builder } pub fn get_nip05(&self) -> Option { self.inner.nip05.clone() } - pub fn set_lud06(self: Arc, lud06: String) -> Arc { + pub fn set_lud06(self: Arc, lud06: String) -> Self { let mut builder = unwrap_or_clone_arc(self); builder.inner = builder.inner.lud06(lud06); - Arc::new(builder) + builder } pub fn get_lud06(&self) -> Option { self.inner.lud06.clone() } - pub fn set_lud16(self: Arc, lud16: String) -> Arc { + pub fn set_lud16(self: Arc, lud16: String) -> Self { let mut builder = unwrap_or_clone_arc(self); builder.inner = builder.inner.lud16(lud16); - Arc::new(builder) + builder } pub fn get_lud16(&self) -> Option { self.inner.lud16.clone() } - pub fn set_custom_field(self: Arc, key: String, value: String) -> Arc { + pub fn set_custom_field(self: Arc, key: String, value: String) -> Self { let mut builder = unwrap_or_clone_arc(self); builder.inner = builder.inner.custom_field(key, value); - Arc::new(builder) + builder } pub fn get_custom_field(&self, key: String) -> Option { diff --git a/bindings/nostr-ffi/src/types/time.rs b/bindings/nostr-ffi/src/types/time.rs index af0740c45..74946a64f 100644 --- a/bindings/nostr-ffi/src/types/time.rs +++ b/bindings/nostr-ffi/src/types/time.rs @@ -3,7 +3,6 @@ // Distributed under the MIT software license use std::ops::Deref; -use std::sync::Arc; use uniffi::Object; @@ -29,17 +28,24 @@ impl Deref for Timestamp { impl Timestamp { /// Get UNIX timestamp #[uniffi::constructor] - pub fn now() -> Arc { - Arc::new(Self { + pub fn now() -> Self { + Self { inner: nostr::Timestamp::now(), - }) + } } #[uniffi::constructor] - pub fn from_secs(secs: u64) -> Arc { - Arc::new(Self { + pub fn tweaked() -> Self { + Self { + inner: nostr::Timestamp::tweaked(), + } + } + + #[uniffi::constructor] + pub fn from_secs(secs: u64) -> Self { + Self { inner: nostr::Timestamp::from(secs), - }) + } } /// Get timestamp as [`u64`] diff --git a/bindings/nostr-sdk-ffi/src/relay.rs b/bindings/nostr-sdk-ffi/src/relay.rs index 2e24cb992..21820ab53 100644 --- a/bindings/nostr-sdk-ffi/src/relay.rs +++ b/bindings/nostr-sdk-ffi/src/relay.rs @@ -37,7 +37,7 @@ impl RelayConnectionStats { self.inner.uptime() } - pub fn connected_at(&self) -> Arc { + pub fn connected_at(&self) -> Timestamp { let secs = self.inner.connected_at().as_u64(); Timestamp::from_secs(secs) }