commit 1e7f3d77a971cd4b77dad63d0488548d5f248494
parent c83fff8939521ded3f013ba3887433e31ce436cc
Author: triesap <tyson@radroots.org>
Date: Mon, 13 Apr 2026 02:45:15 +0000
sdk: type listing draft publish surface
Diffstat:
5 files changed, 38 insertions(+), 15 deletions(-)
diff --git a/crates/sdk/src/client.rs b/crates/sdk/src/client.rs
@@ -370,7 +370,7 @@ impl<'a> ListingClient<'a> {
pub fn build_draft(
&self,
listing_value: &listing::RadrootsListing,
- ) -> Result<WireEventParts, listing::EventEncodeError> {
+ ) -> Result<listing::RadrootsListingDraft, listing::EventEncodeError> {
listing::build_draft(listing_value)
}
@@ -393,7 +393,8 @@ impl<'a> ListingClient<'a> {
listing_value: &listing::RadrootsListing,
) -> Result<SdkPublishReceipt, SdkPublishError> {
let parts = listing::build_draft(listing_value)
- .map_err(|err| SdkPublishError::Encode(err.to_string()))?;
+ .map_err(|err| SdkPublishError::Encode(err.to_string()))?
+ .into_wire_parts();
self.client
.publish_parts_via_relay_with_identity(identity, parts, "listing.publish_with_identity")
.await
@@ -407,12 +408,12 @@ impl<'a> ListingClient<'a> {
pub async fn publish_draft_with_identity(
&self,
identity: &RadrootsIdentity,
- draft: WireEventParts,
+ draft: listing::RadrootsListingDraft,
) -> Result<SdkPublishReceipt, SdkPublishError> {
self.client
.publish_parts_via_relay_with_identity(
identity,
- draft,
+ draft.into_wire_parts(),
"listing.publish_draft_with_identity",
)
.await
diff --git a/crates/sdk/src/listing.rs b/crates/sdk/src/listing.rs
@@ -7,13 +7,30 @@ pub use radroots_trade::listing::validation::RadrootsTradeListing as TradeListin
use crate::{NostrTags, RadrootsNostrEvent, WireEventParts};
+#[derive(Debug, Clone)]
+pub struct RadrootsListingDraft {
+ parts: WireEventParts,
+}
+
+impl RadrootsListingDraft {
+ pub fn as_wire_parts(&self) -> &WireEventParts {
+ &self.parts
+ }
+
+ pub fn into_wire_parts(self) -> WireEventParts {
+ self.parts
+ }
+}
+
pub fn build_tags(listing: &RadrootsListing) -> Result<NostrTags, EventEncodeError> {
radroots_events_codec::listing::encode::listing_build_tags(listing)
}
#[cfg(feature = "serde_json")]
-pub fn build_draft(listing: &RadrootsListing) -> Result<WireEventParts, EventEncodeError> {
- radroots_events_codec::listing::encode::to_wire_parts(listing)
+pub fn build_draft(listing: &RadrootsListing) -> Result<RadrootsListingDraft, EventEncodeError> {
+ Ok(RadrootsListingDraft {
+ parts: radroots_events_codec::listing::encode::to_wire_parts(listing)?,
+ })
}
#[cfg(feature = "serde_json")]
diff --git a/crates/sdk/tests/client.rs b/crates/sdk/tests/client.rs
@@ -157,15 +157,15 @@ fn listing_and_trade_clients_wrap_existing_sdk_facades() {
.listing()
.build_draft(&listing_value)
.expect("listing draft");
- assert_eq!(draft.kind, KIND_LISTING);
+ assert_eq!(draft.as_wire_parts().kind, KIND_LISTING);
let event = RadrootsNostrEvent {
id: "listing-1".into(),
author: "seller".into(),
created_at: 1,
- kind: draft.kind,
- tags: draft.tags,
- content: draft.content,
+ kind: draft.as_wire_parts().kind,
+ tags: draft.as_wire_parts().tags.clone(),
+ content: draft.as_wire_parts().content.clone(),
sig: String::new(),
};
let parsed = client
diff --git a/crates/sdk/tests/facade.rs b/crates/sdk/tests/facade.rs
@@ -113,9 +113,9 @@ fn listing_event(listing_value: &RadrootsListing) -> RadrootsNostrEvent {
id: "event-1".into(),
author: "seller".into(),
created_at: 1,
- kind: parts.kind,
- tags: parts.tags,
- content: parts.content,
+ kind: parts.as_wire_parts().kind,
+ tags: parts.as_wire_parts().tags.clone(),
+ content: parts.as_wire_parts().content.clone(),
sig: String::new(),
}
}
diff --git a/crates/sdk/tests/radrootsd.rs b/crates/sdk/tests/radrootsd.rs
@@ -12,7 +12,7 @@ use radroots_sdk::listing::{
use radroots_sdk::{
RadrootsNostrEvent, RadrootsSdkClient, RadrootsSdkConfig, RadrootsdAuth, RadrootsdConfig,
SdkEnvironment, SdkPublishError, SdkRadrootsdListingPublishRequest, SdkTransportMode,
- SdkTransportReceipt, SignerConfig, WireEventParts,
+ SdkTransportReceipt, SignerConfig,
};
use serde_json::{Value, json};
use tokio::io::{AsyncReadExt, AsyncWriteExt};
@@ -238,7 +238,12 @@ fn sample_listing() -> RadrootsListing {
}
}
-fn sdk_event(author: &str, created_at: u32, parts: WireEventParts) -> RadrootsNostrEvent {
+fn sdk_event(
+ author: &str,
+ created_at: u32,
+ draft: radroots_sdk::listing::RadrootsListingDraft,
+) -> RadrootsNostrEvent {
+ let parts = draft.into_wire_parts();
RadrootsNostrEvent {
id: "event-1".to_owned(),
author: author.to_owned(),