lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README

commit 3f51d10bd8b9e1fb03ef76f540b530327de2869e
parent 22138442a8a167149da0455cb7044e451e454e0d
Author: triesap <tyson@radroots.org>
Date:   Fri, 31 Jul 2026 15:08:11 +0000

nostr: document public api contract

- Replace the package README with charter, feature, security, and side-effect guidance.
- Publish the README as crate rustdoc and document every current public module.
- Add and execute a standalone canonical identity-conversion example.
- Record and index the reviewed all-feature public API baseline.

Diffstat:
Mcrates/nostr/README.md | 294++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Acrates/nostr/examples/identity_conversion.rs | 12++++++++++++
Mcrates/nostr/src/codec_adapters.rs | 5+++++
Mcrates/nostr/src/draft_signing.rs | 5+++++
Mcrates/nostr/src/error.rs | 5+++++
Mcrates/nostr/src/event_adapters.rs | 5+++++
Mcrates/nostr/src/event_verify.rs | 5+++++
Mcrates/nostr/src/events/application_handler.rs | 2++
Mcrates/nostr/src/events/comment.rs | 2++
Mcrates/nostr/src/events/deletion.rs | 2++
Mcrates/nostr/src/events/food_availability.rs | 2++
Mcrates/nostr/src/events/jobs.rs | 2++
Mcrates/nostr/src/events/metadata.rs | 2++
Mcrates/nostr/src/events/mod.rs | 6++++++
Mcrates/nostr/src/events/post.rs | 2++
Mcrates/nostr/src/events/reply.rs | 2++
Mcrates/nostr/src/filter.rs | 3+++
Mcrates/nostr/src/job_adapter.rs | 5+++++
Mcrates/nostr/src/lib.rs | 2++
Mcrates/nostr/src/signing.rs | 3+++
Mcrates/nostr/src/types.rs | 6++++++
Mcrates/nostr/src/util.rs | 2++
Mdocs/api/README.md | 1+
Adocs/api/radroots_nostr.txt | 408+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
24 files changed, 653 insertions(+), 130 deletions(-)

diff --git a/crates/nostr/README.md b/crates/nostr/README.md @@ -1,143 +1,177 @@ # radroots_nostr -This is the README for `radroots_nostr`, which provides shared Nostr protocol -primitives for the `radroots` core libraries. - -## Overview - - * typed filters, tags, events, relay metadata, parsers, and utility helpers; - * adapters between `radroots_event`, `radroots_event_codec`, and Nostr wire - representations; - * strict BUD-11 signed HTTP authorization adapters behind the `blossom` - feature; - * focused NIP-17/NIP-59 message wrapping behind the `nip17` feature; and - * an opaque local signer adapter behind the `signing` feature. - -This crate owns no relay client, HTTP client, endpoint operation, retry loop, -network runtime, persistence, account selection, or outbox orchestration. -Its public API is consumed through explicit owning modules; it intentionally -publishes no broad prelude. - -The `blossom` feature signs kind-24242 authorization events and encodes or -verifies their `Authorization: Nostr` HTTP values. It does not publish these -ephemeral authorization events to relays. Pure BUD-11 claim parsing and policy -validation remain in `radroots_blossom`. - -The `nip17` feature wraps and unwraps typed Radroots message and message-file +`radroots_nostr` is the portable Nostr protocol adapter for Radroots. It +converts between canonical Radroots identity/event values and Nostr protocol +values, provides typed NIP helpers, and supplies an optional concrete local +implementation of the `radroots_signing` SPI. + +This crate owns no relay client. It owns no sockets, HTTP client, relay pool, +database, account store, retry loop, scheduler, executor, or process-global +state. Live Nostr transport belongs in `radroots_transport_nostr`; application +composition belongs in `radroots_sdk` or an advanced host. + +The authoritative package charter is the +[`radroots_nostr` section of the Release V1 specification](https://github.com/radrootslabs/lib/blob/master/docs/specs/radroots_crates_release_v1.md#10-radroots_nostr). + +## Quick start + +Convert a canonical Radroots public key to and from its NIP-19 `npub` +representation: + +```rust +use radroots_identity::PublicKey; +use radroots_nostr::key::{public_key_from_npub, public_key_to_npub}; + +let public_key = PublicKey::from_hex( + "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", +)?; +let npub = public_key_to_npub(public_key)?; + +assert_eq!(public_key_from_npub(&npub)?, public_key); +# Ok::<(), Box<dyn core::error::Error>>(()) +``` + +The same flow is available as a standalone example: + +```sh +cargo run -p radroots_nostr --example identity_conversion +``` + +## Public boundary + +The durable public modules are organized by responsibility: + +- `event` converts event identifiers, coordinates, and signed NIP-01 values. +- `filter` constructs explicit Nostr subscription filters. +- `key` converts public identities, provides NIP-19 helpers, and—with + `signing`—owns opaque local secret-key handling and NIP-49 operations. +- `tag` converts ordered tag parts and exposes focused tag inspection helpers. +- `signing` implements `radroots_signing::Signer` for local Nostr keys. +- `nip17` wraps and unwraps typed Radroots message events with NIP-17/NIP-59. +- `blossom` signs and verifies BUD-11 HTTP authorization values. + +`Error` is the only intended root export. Protocol representations that must +cross the adapter are exposed from the module that owns the conversion, rather +than through a root prelude or wildcard alias set. + +## Event model and typed authoring + +Canonical product drafts and verified events belong to `radroots_event`. +Encoding, signature verification, contract admission, and typed inbound +projection belong to `radroots_event_codec`. This crate performs the explicit +translation to or from Nostr protocol values. + +With `events`, typed builders cover the supported Profile, Update, +PhotoUpdate, Ask, Reply, Comment, deletion-request, and FoodAvailability +authoring profiles. Sealed focused builders fix the event kind and canonical +tag model before signer access. Generic builders reject reserved typed kinds; +relaying an already signed event is a transport operation and does not grant a +typed Radroots authoring claim. + +Conversion and verification are deterministic for their inputs. Inbound +admission proves the received event and its typed projection; it does not prove +that referenced events, authors, addresses, relays, or external resources +exist. + +## Local signing + +The `signing` feature provides an opaque `key::SecretKey` and a concrete local +signer adapter. Secret-bearing values are single-owner, are not serializable, +and always redact `Debug` output. Public identities are converted to the +canonical `radroots_identity::PublicKey` boundary before they leave the +adapter. + +NIP-19 `nsec` export and NIP-49 encryption/decryption are explicit operations. +`secret_key_to_nsec` deliberately returns plaintext secret material; callers +must treat that string as a credential, avoid logs and serialization, and +zeroize or discard it promptly. Password, ciphertext, and plaintext failures +are normalized so error values do not retain caller-supplied secret text. + +## Side effects, cancellation, and commit points + +This crate performs in-memory parsing, validation, encoding, cryptography, and +local signing only. It never opens a network connection, writes a file or +database, selects an account, publishes an event, or installs a runtime. + +Some cryptographic adapters are async because their upstream protocol +operations are async. Dropping one of those futures cancels local computation +and creates no external durable effect. The crate has no remote publication or +persistence commit point: the only successful result is the value returned to +the caller. A transport or host that later publishes or stores that value owns +its own cancellation and commit semantics. + +The `blossom` module creates and verifies signed `Authorization: Nostr` values +but never sends an HTTP request. The `nip17` module creates and opens gift-wrap events. It does not select relays, deliver events, retry operations, or persist message state. -The `events` feature is std-backed. With it, kind-1 root publication is -available only through typed Update, PhotoUpdate, and Ask builders backed by -the strict `radroots_event_codec` wire operations. NIP-10 Reply publication is -separately available through the typed direct or nested Reply model and its -sealed builder. Authored Replies always emit marked `root` and optional -`reply` event references plus the required referenced-author `p` tags. -Verified inbound projection also accepts deprecated positional NIP-10 -references for interoperability and preserves valid supplemental unmarked `e` -references as citations. Empty marker slots remain absent even when an optional -fifth-element author hint is present. Missing or malformed advisory -participant, middle citation, relay, and referenced-author metadata is retained -as ordered diagnostics instead of erasing an unambiguous Reply. A Reply remains -thread content and can never enter root-card admission. Reply admission proves -the Reply event's NIP-01 id and signature; it does not prove that a referenced -target exists, is kind `1`, or was authored by the declared referenced author. - -Strict -[NIP-22](https://github.com/nostr-protocol/nips/blob/bdfa7e62ef87fcfcb992b1a27aee49d36b0b4f91/22.md) -Comment publication is separately exposed through -`RadrootsNostrNip22CommentEventBuilder`. Its only input is a checked -`AuthoredNip22Comment`; callers may choose the timestamp and sign or -publish, but cannot mutate the kind, content, or canonical -root, parent, kind, and participant tags. The profile admits event or address -roots only for kinds `30402`, `31922`, and `31923`; it has no external -`I`/`i` or kind-`1` root surface. - -Reply and Comment authoring and verified projection share the portable -`NostrRelayHint` profile rather than the generic relay URL type. It -accepts only exact lowercase `ws://` or `wss://` visible-ASCII URLs with a -canonical lowercase DNS, four-octet IPv4, or bracketed pure-hex RFC 5952 IPv6 -authority, an optional canonical port `1..65535`, and RFC 3986 -path-abempty/query syntax using uppercase `%HH` escapes. Rejected inbound hints -remain verbatim in ordered raw-tag diagnostics. The hint profile does not own -the event boundary's separate 4,096-byte tag-element budget. - -Inbound Comment projection is owned by `radroots_event_codec` and accepts only -an id-and-signature verified kind-`1111` envelope. -`RadrootsInboundNip22CommentProjection` retains the order-independent -authority projection, and `RadrootsAdmittedNip22CommentEvent` keeps it bound to -the verified envelope. Malformed optional relay or participant metadata -remains diagnostic, while cardinality, unsupported roots, coordinate -conflicts, and valid-but-conflicting author hints fail admission. Admission -does not prove any referenced target or relay. The registry-v7 contract is -`TypedOnly` for authoring and `AdmissionOnly` for matching, with registry -versions `1` through `6` stale. - -Strict -[NIP-09](https://github.com/nostr-protocol/nips/blob/bdfa7e62ef87fcfcb992b1a27aee49d36b0b4f91/09.md) -deletion-request publication is exposed through the sealed -`RadrootsNostrNip09DeletionRequestEventBuilder`. Its only input is a checked -`AuthoredNip09DeletionRequest`; callers may choose the timestamp and -sign or publish, but cannot mutate the kind, content, or canonical `e`, `a`, -and derived `k` tags. Generic kind-5 builders are rejected before signer -access. Admission proves only the signed deletion-request event and its typed -projection. It does not prove target authorship, existence, deletion -authorization, applicability, relay handling, or any deletion effect. - -The former free-form text-note post builder is removed. Generic protocol -builders reject kind-0 Profile events, every kind-1 event, every kind-5 -deletion request, and kind-1111 Comments at both direct signing and -client-publication boundaries before signer access. Typed media builders can -sign or publish only after the owning runtime separately proves successful -BUD-02 upload completion; their byte-verified descriptors do not attest upload -completion. The generic net manager intentionally exposes no direct -PhotoUpdate or media Ask publisher. - -The complete governed Comment operation namespace remains -`social.comment.build_authored_draft`, -`social.comment.project_verified_event`, and -`social.comment.verify_and_admit_event`. The typed builder and client -publication surface consume that strict contract; they do not add a fourth -wire operation. Comment inputs retain the 131072-byte content, 1024-tag, -4096-total-element, 4096-byte element, 131072-byte aggregate tag, and -262144-byte compact signed-wire ceilings proven by the canonical -self-contained 114-case conformance corpus. - -Focused FoodAvailability kind-30402 authoring likewise uses a sealed builder. -Its `created_at` is fixed during strict construction and cannot be changed -after wire validation. Generic direct signing and client publication reject -focused or mixed FoodAvailability/Operational Listing markers before signer -access; marker-free NIP-99 and operational-only compatibility builders remain -available. Relaying an already signed event remains a transport operation and -does not establish typed FoodAvailability authoring. - -The opaque generic-builder policy governs Radroots builder signing and client -publication. It does not redefine the standard NIP-46 `sign_event` method or a -signer backend's externally supplied unsigned-event operation. Those are -explicit low-level Nostr interoperability boundaries; their outputs carry no -Radroots typed product-authoring claim and are not product authoring entry -points. - -Generic protocol events that require an external custody provider finalize -through `RadrootsNostrExternalSigningRequest`. The opaque request is available -without the relay-client feature and serializes as a standard unsigned Nostr -event only after generic typed-authoring reservations pass. It accepts a -returned event only when the author and canonical event id match the request -and the complete NIP-01 event verifies. It exposes no raw mutable builder, -unsigned-event conversion, or unchecked deserialization path. - -Strict kind-0 Profile publication uses -`RadrootsNostrProfileEventBuilder`, constructed only from -`AuthoredProfile`. The sealed wrapper permits timestamp selection and -local signing or client publication, but no raw kind, content, or tag -mutation. A media-bearing Profile still requires runtime-owned proof of -successful BUD-02 upload before it reaches this authoring boundary. +## Serialization contract + +- Canonical durable Radroots data should be serialized through + `radroots_event`, `radroots_event_codec`, or versioned `radroots_protocol` + contracts. +- Explicit Nostr boundary aliases use the upstream NIP-01 JSON representation. +- `RadrootsNostrExternalSigningRequest` serializes only as the standard + unsigned Nostr event after reserved-kind and authoring-policy validation. +- Returned externally signed events are accepted only when author, canonical + event ID, and the complete NIP-01 signature verify against the request. +- Secret-bearing key and local-signer values do not implement serialization. + +Deserializing protocol data never establishes product admission, account +authority, upload completion, referenced-event existence, or relay trust. + +## Security guidance + +- Parse untrusted protocol data through the checked conversion/admission + functions; do not infer Radroots product validity from a syntactically valid + upstream event. +- Treat event content, tags, relay hints, Blossom claims, and NIP-17 plaintext + as untrusted input even after signature verification. +- BUD-11 authorization events are ephemeral credentials for a specific HTTP + operation. This crate does not transmit them or manage replay protection for + a server. +- Typed media descriptors prove bytes and metadata, not successful BUD-02 + upload. The composing runtime must establish upload completion separately. +- NIP-49 protects exported key material at rest; callers still own password + handling, ciphertext storage, memory hygiene, and access control. +- The crate forbids unsafe code and does not expose a live Nostr client or an + ambient authority boundary. + +## Features + +| Feature | Default | Contract | +| --- | --- | --- | +| `std` | yes | Enables standard-library support required by selected upstream protocol operations; it adds no network, storage, runtime, or global initialization. | +| `events` | yes | Enables typed event builders, deterministic Radroots/Nostr event conversion, and verified event adapters. | +| `signing` | no | Adds opaque local secret handling, NIP-49 helpers, draft signing, and the concrete local `radroots_signing::Signer` adapter. | +| `nip17` | no | Adds focused NIP-17/NIP-59 typed message and message-file wrapping/unwrapping; no delivery or persistence. | +| `blossom` | no | Adds BUD-11 signed HTTP authorization value creation and verification; no HTTP client or endpoint operation. | + +Features are additive. `--no-default-features` provides the portable +`no_std + alloc` conversion core. The manifest's `codec` feature is a +non-release compatibility switch used by older focused adapters; it is not in +the supported public feature vocabulary. + +## Intended consumers + +- `radroots_nostr_connect` uses explicit Nostr conversion while owning NIP-46 + protocol state. +- `radroots_transport_nostr` performs live relay I/O behind the generic + transport contracts. +- `radroots_sdk` composes local or remote signing, storage, and transport. +- Myc and `radrootsd` consume focused protocol adapters without moving their + host authority into this crate. +- Advanced Rust hosts may use this package directly for offline conversion, + verification, or a local signer adapter. + +Applications that only need ordinary Radroots workflows should normally use +`radroots` or `radroots_sdk`. ## Copyright Except as otherwise noted, all files in the `radroots_nostr` distribution are - Copyright (c) 2025 Tyson Lupul +Copyright (c) 2025 Tyson Lupul For information on usage and redistribution, and for a DISCLAIMER OF ALL WARRANTIES, see LICENSE included in the `radroots_nostr` distribution. diff --git a/crates/nostr/examples/identity_conversion.rs b/crates/nostr/examples/identity_conversion.rs @@ -0,0 +1,12 @@ +use radroots_identity::PublicKey; +use radroots_nostr::key::{public_key_from_npub, public_key_to_npub}; + +fn main() -> Result<(), Box<dyn std::error::Error>> { + let public_key = + PublicKey::from_hex("79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798")?; + let npub = public_key_to_npub(public_key)?; + + assert_eq!(public_key_from_npub(&npub)?, public_key); + println!("{npub}"); + Ok(()) +} diff --git a/crates/nostr/src/codec_adapters.rs b/crates/nostr/src/codec_adapters.rs @@ -1,3 +1,8 @@ +//! Compatibility adapters between upstream Nostr values and event-codec data. +//! +//! The module contains pure value transformations and performs no storage or +//! network operations. + extern crate alloc; use alloc::{string::String, vec::Vec}; diff --git a/crates/nostr/src/draft_signing.rs b/crates/nostr/src/draft_signing.rs @@ -1,3 +1,8 @@ +//! Exact local signing helpers for frozen canonical Radroots drafts. +//! +//! Successful functions return a signed value and have no persistence or +//! publication commit point. + #![forbid(unsafe_code)] use crate::error::RadrootsNostrError; diff --git a/crates/nostr/src/error.rs b/crates/nostr/src/error.rs @@ -1,3 +1,8 @@ +//! Normalized Nostr adapter failures. +//! +//! Errors describe stable failure categories without retaining secret keys, +//! passwords, plaintext messages, or caller-supplied credential strings. + use alloc::{boxed::Box, string::String}; use thiserror::Error; diff --git a/crates/nostr/src/event_adapters.rs b/crates/nostr/src/event_adapters.rs @@ -1,3 +1,8 @@ +//! Deterministic adapters for typed Radroots event payloads and Nostr tags. +//! +//! These helpers transform already-supplied values only; they perform no +//! relay I/O, persistence, account selection, or runtime initialization. + #[cfg(feature = "events")] use radroots_event::profile::{ RADROOTS_PROFILE_TYPE_TAG_KEY, radroots_profile_type_from_tag_value, diff --git a/crates/nostr/src/event_verify.rs b/crates/nostr/src/event_verify.rs @@ -1,3 +1,8 @@ +//! NIP-01 identity/signature verification for inbound Nostr events. +//! +//! Cryptographic verification does not establish product-contract admission, +//! referenced-event existence, relay trust, or application authorization. + #![forbid(unsafe_code)] use radroots_event::{ diff --git a/crates/nostr/src/events/application_handler.rs b/crates/nostr/src/events/application_handler.rs @@ -1,3 +1,5 @@ +//! Typed authoring helpers for NIP-89 application-handler announcements. + #![forbid(unsafe_code)] extern crate alloc; diff --git a/crates/nostr/src/events/comment.rs b/crates/nostr/src/events/comment.rs @@ -1,3 +1,5 @@ +//! Sealed authoring for strict NIP-22 Comment events. + use crate::{ error::RadrootsNostrError, types::{ diff --git a/crates/nostr/src/events/deletion.rs b/crates/nostr/src/events/deletion.rs @@ -1,3 +1,5 @@ +//! Sealed authoring for validated NIP-09 deletion requests. + use crate::{ error::RadrootsNostrError, types::{ diff --git a/crates/nostr/src/events/food_availability.rs b/crates/nostr/src/events/food_availability.rs @@ -1,3 +1,5 @@ +//! Sealed authoring for focused Radroots FoodAvailability events. + use crate::{ error::RadrootsNostrError, types::{ diff --git a/crates/nostr/src/events/jobs.rs b/crates/nostr/src/events/jobs.rs @@ -1,3 +1,5 @@ +//! Low-level NIP-90 job request, result, and feedback event helpers. + use alloc::{string::String, vec::Vec}; use nostr::nips::nip90::{DataVendingMachineStatus, JobFeedbackData}; diff --git a/crates/nostr/src/events/metadata.rs b/crates/nostr/src/events/metadata.rs @@ -1,3 +1,5 @@ +//! Sealed authoring for validated NIP-01 profile metadata events. + #[cfg(feature = "events")] use crate::error::RadrootsNostrError; #[cfg(feature = "events")] diff --git a/crates/nostr/src/events/mod.rs b/crates/nostr/src/events/mod.rs @@ -1,3 +1,9 @@ +//! Typed Nostr event authoring profiles used by the Radroots adapter. +//! +//! Focused builders seal reserved kinds and canonical tag construction before +//! signer access. Live publication, persistence, and retry policy remain +//! outside this module. + #[cfg(feature = "events")] pub mod application_handler; #[cfg(feature = "events")] diff --git a/crates/nostr/src/events/post.rs b/crates/nostr/src/events/post.rs @@ -1,3 +1,5 @@ +//! Typed authoring and filtering for supported Radroots social root events. + #[cfg(feature = "events")] use crate::error::RadrootsNostrError; #[cfg(feature = "events")] diff --git a/crates/nostr/src/events/reply.rs b/crates/nostr/src/events/reply.rs @@ -1,3 +1,5 @@ +//! Sealed authoring for strict marked NIP-10 Reply events. + use crate::{ error::RadrootsNostrError, types::{ diff --git a/crates/nostr/src/filter.rs b/crates/nostr/src/filter.rs @@ -1,4 +1,7 @@ //! Explicit construction of portable Nostr subscription filters. +//! +//! Filters are passive protocol values. Constructing one does not subscribe, +//! contact a relay, install a clock, or retain runtime state. use crate::error::RadrootsNostrError; use crate::event::Kind; diff --git a/crates/nostr/src/job_adapter.rs b/crates/nostr/src/job_adapter.rs @@ -1,3 +1,8 @@ +//! Nostr conversion helpers for legacy job event payloads. +//! +//! This module only maps supplied values; it does not schedule work, contact a +//! relay, or persist job state. + #![forbid(unsafe_code)] use crate::types::{RadrootsNostrEvent, RadrootsNostrKind}; diff --git a/crates/nostr/src/lib.rs b/crates/nostr/src/lib.rs @@ -1,4 +1,6 @@ +#![doc = include_str!("../README.md")] #![cfg_attr(not(feature = "std"), no_std)] +#![forbid(unsafe_code)] extern crate alloc; #[cfg(not(feature = "std"))] diff --git a/crates/nostr/src/signing.rs b/crates/nostr/src/signing.rs @@ -1,4 +1,7 @@ //! Concrete local Nostr implementation of the generic signing SPI. +//! +//! Signing is local and in-memory. Success returns a verified receipt without +//! persisting or publishing it; dropping the future creates no durable effect. use core::fmt; use std::{ diff --git a/crates/nostr/src/types.rs b/crates/nostr/src/types.rs @@ -1,3 +1,9 @@ +//! Low-level Nostr protocol values and checked generic authoring requests. +//! +//! This compatibility-oriented module does not grant typed Radroots product +//! admission. Prefer the focused `event`, `key`, `tag`, and `events` modules +//! for new code. + #![forbid(unsafe_code)] #[cfg(feature = "std")] diff --git a/crates/nostr/src/util.rs b/crates/nostr/src/util.rs @@ -1,3 +1,5 @@ +//! Small deterministic helpers for upstream Nostr protocol values. + use crate::types::{RadrootsNostrEvent, RadrootsNostrTimestamp}; pub fn created_at_u32_saturating(ts: RadrootsNostrTimestamp) -> u32 { diff --git a/docs/api/README.md b/docs/api/README.md @@ -39,3 +39,4 @@ expand a package beyond its charter. | `radroots_trade` | [`radroots_trade.txt`](radroots_trade.txt) | [release V1 specification](../specs/radroots_crates_release_v1.md) | | `radroots_signing` | [`radroots_signing.txt`](radroots_signing.txt) | [release V1 specification](../specs/radroots_crates_release_v1.md) | | `radroots_transport` | [`radroots_transport.txt`](radroots_transport.txt) | [release V1 specification](../specs/radroots_crates_release_v1.md) | +| `radroots_nostr` | [`radroots_nostr.txt`](radroots_nostr.txt) | [release V1 specification](../specs/radroots_crates_release_v1.md) | diff --git a/docs/api/radroots_nostr.txt b/docs/api/radroots_nostr.txt @@ -0,0 +1,408 @@ +pub mod radroots_nostr +pub mod radroots_nostr::blossom +#[non_exhaustive] pub enum radroots_nostr::blossom::RadrootsNostrBlossomError +pub radroots_nostr::blossom::RadrootsNostrBlossomError::BlossomClaim(radroots_blossom::error::Error) +pub radroots_nostr::blossom::RadrootsNostrBlossomError::EmptyHeaderPayload +pub radroots_nostr::blossom::RadrootsNostrBlossomError::EventSigning +pub radroots_nostr::blossom::RadrootsNostrBlossomError::HeaderPaddingForbidden +pub radroots_nostr::blossom::RadrootsNostrBlossomError::InvalidEventId +pub radroots_nostr::blossom::RadrootsNostrBlossomError::InvalidEventJson +pub radroots_nostr::blossom::RadrootsNostrBlossomError::InvalidEventKind +pub radroots_nostr::blossom::RadrootsNostrBlossomError::InvalidEventKind::actual: u64 +pub radroots_nostr::blossom::RadrootsNostrBlossomError::InvalidEventSignature +pub radroots_nostr::blossom::RadrootsNostrBlossomError::InvalidHeaderBase64 +pub radroots_nostr::blossom::RadrootsNostrBlossomError::InvalidHeaderScheme +pub radroots_nostr::blossom::RadrootsNostrBlossomError::InvalidHeaderUtf8 +pub radroots_nostr::blossom::RadrootsNostrBlossomError::InvalidHeaderWhitespace +pub radroots_nostr::blossom::RadrootsNostrBlossomError::NonCanonicalHeaderBase64 +impl radroots_nostr::blossom::RadrootsNostrBlossomError +pub fn radroots_nostr::blossom::RadrootsNostrBlossomError::blossom_claim_error(&self) -> core::option::Option<&radroots_blossom::error::Error> +pub const fn radroots_nostr::blossom::RadrootsNostrBlossomError::code(&self) -> &'static str +impl core::convert::From<radroots_blossom::error::Error> for radroots_nostr::blossom::RadrootsNostrBlossomError +pub fn radroots_nostr::blossom::RadrootsNostrBlossomError::from(radroots_blossom::error::Error) -> Self +impl core::error::Error for radroots_nostr::blossom::RadrootsNostrBlossomError +impl core::fmt::Display for radroots_nostr::blossom::RadrootsNostrBlossomError +pub fn radroots_nostr::blossom::RadrootsNostrBlossomError::fmt(&self, &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub struct radroots_nostr::blossom::RadrootsNostrBlossomAuthorizationHeader(_) +impl radroots_nostr::blossom::RadrootsNostrBlossomAuthorizationHeader +pub fn radroots_nostr::blossom::RadrootsNostrBlossomAuthorizationHeader::as_str(&self) -> &str +pub fn radroots_nostr::blossom::RadrootsNostrBlossomAuthorizationHeader::into_string(self) -> alloc::string::String +impl core::convert::AsRef<str> for radroots_nostr::blossom::RadrootsNostrBlossomAuthorizationHeader +pub fn radroots_nostr::blossom::RadrootsNostrBlossomAuthorizationHeader::as_ref(&self) -> &str +impl core::fmt::Debug for radroots_nostr::blossom::RadrootsNostrBlossomAuthorizationHeader +pub fn radroots_nostr::blossom::RadrootsNostrBlossomAuthorizationHeader::fmt(&self, &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub struct radroots_nostr::blossom::RadrootsNostrSignedBlossomAuthorization +impl radroots_nostr::blossom::RadrootsNostrSignedBlossomAuthorization +pub fn radroots_nostr::blossom::RadrootsNostrSignedBlossomAuthorization::author(&self) -> radroots_nostr::types::RadrootsNostrPublicKey +pub fn radroots_nostr::blossom::RadrootsNostrSignedBlossomAuthorization::created_at(&self) -> radroots_nostr::event::Timestamp +pub fn radroots_nostr::blossom::RadrootsNostrSignedBlossomAuthorization::event_id(&self) -> radroots_nostr::event::EventId +impl core::fmt::Debug for radroots_nostr::blossom::RadrootsNostrSignedBlossomAuthorization +pub fn radroots_nostr::blossom::RadrootsNostrSignedBlossomAuthorization::fmt(&self, &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub struct radroots_nostr::blossom::RadrootsNostrVerifiedBlossomAuthorization +impl radroots_nostr::blossom::RadrootsNostrVerifiedBlossomAuthorization +pub fn radroots_nostr::blossom::RadrootsNostrVerifiedBlossomAuthorization::author(&self) -> radroots_nostr::types::RadrootsNostrPublicKey +pub fn radroots_nostr::blossom::RadrootsNostrVerifiedBlossomAuthorization::claim(&self) -> &radroots_blossom::authorization::ValidatedAuthorizationClaim +pub fn radroots_nostr::blossom::RadrootsNostrVerifiedBlossomAuthorization::created_at(&self) -> radroots_nostr::event::Timestamp +pub fn radroots_nostr::blossom::RadrootsNostrVerifiedBlossomAuthorization::event_id(&self) -> radroots_nostr::event::EventId +impl core::fmt::Debug for radroots_nostr::blossom::RadrootsNostrVerifiedBlossomAuthorization +pub fn radroots_nostr::blossom::RadrootsNostrVerifiedBlossomAuthorization::fmt(&self, &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub fn radroots_nostr::blossom::radroots_nostr_decode_verify_blossom_authorization_header(&str, &radroots_blossom::authorization::AuthorizationValidation) -> core::result::Result<radroots_nostr::blossom::RadrootsNostrVerifiedBlossomAuthorization, radroots_nostr::blossom::RadrootsNostrBlossomError> +pub fn radroots_nostr::blossom::radroots_nostr_encode_blossom_authorization_header(&radroots_nostr::blossom::RadrootsNostrSignedBlossomAuthorization) -> radroots_nostr::blossom::RadrootsNostrBlossomAuthorizationHeader +pub fn radroots_nostr::blossom::radroots_nostr_sign_blossom_authorization(&radroots_nostr::types::RadrootsNostrKeys, &radroots_blossom::authorization::AuthoredUploadClaim) -> core::result::Result<radroots_nostr::blossom::RadrootsNostrSignedBlossomAuthorization, radroots_nostr::blossom::RadrootsNostrBlossomError> +pub mod radroots_nostr::codec_adapters +pub fn radroots_nostr::codec_adapters::to_job_feedback_index(&radroots_nostr::event::Event) -> core::result::Result<radroots_event_codec::parsed::RadrootsParsedEvent<radroots_event::social::job_feedback::JobFeedback>, radroots_event_codec::job::error::JobParseError> +pub fn radroots_nostr::codec_adapters::to_job_feedback_metadata(&radroots_nostr::event::Event) -> core::result::Result<radroots_event_codec::parsed::RadrootsParsedData<radroots_event::social::job_feedback::JobFeedback>, radroots_event_codec::job::error::JobParseError> +pub fn radroots_nostr::codec_adapters::to_job_request_index(&radroots_nostr::event::Event) -> core::result::Result<radroots_event_codec::parsed::RadrootsParsedEvent<radroots_event::social::job_request::JobRequest>, radroots_event_codec::job::error::JobParseError> +pub fn radroots_nostr::codec_adapters::to_job_request_metadata(&radroots_nostr::event::Event) -> core::result::Result<radroots_event_codec::parsed::RadrootsParsedData<radroots_event::social::job_request::JobRequest>, radroots_event_codec::job::error::JobParseError> +pub fn radroots_nostr::codec_adapters::to_job_result_index(&radroots_nostr::event::Event) -> core::result::Result<radroots_event_codec::parsed::RadrootsParsedEvent<radroots_event::social::job_result::JobResult>, radroots_event_codec::job::error::JobParseError> +pub fn radroots_nostr::codec_adapters::to_job_result_metadata(&radroots_nostr::event::Event) -> core::result::Result<radroots_event_codec::parsed::RadrootsParsedData<radroots_event::social::job_result::JobResult>, radroots_event_codec::job::error::JobParseError> +pub mod radroots_nostr::draft_signing +pub fn radroots_nostr::draft_signing::radroots_nostr_sign_frozen_draft(&radroots_nostr::types::RadrootsNostrKeys, &radroots_event::draft::EventDraft) -> core::result::Result<radroots_event::draft::SignedEvent, radroots_nostr::error::RadrootsNostrError> +pub mod radroots_nostr::error +pub enum radroots_nostr::error::RadrootsNostrError +pub radroots_nostr::error::RadrootsNostrError::CoordinateConversion +pub radroots_nostr::error::RadrootsNostrError::DraftError(radroots_event::draft::DraftError) +pub radroots_nostr::error::RadrootsNostrError::EventBuildError(nostr::event::builder::Error) +pub radroots_nostr::error::RadrootsNostrError::EventConversion +pub radroots_nostr::error::RadrootsNostrError::EventConversion::field: &'static str +pub radroots_nostr::error::RadrootsNostrError::EventError(nostr::event::error::Error) +pub radroots_nostr::error::RadrootsNostrError::EventWire(radroots_event::wire::v1::EventWireError) +pub radroots_nostr::error::RadrootsNostrError::ExternalSigningAuthorMismatch +pub radroots_nostr::error::RadrootsNostrError::ExternalSigningAuthorMismatch::actual: nostr::key::public_key::PublicKey +pub radroots_nostr::error::RadrootsNostrError::ExternalSigningAuthorMismatch::expected: nostr::key::public_key::PublicKey +pub radroots_nostr::error::RadrootsNostrError::ExternalSigningEventIdMismatch +pub radroots_nostr::error::RadrootsNostrError::ExternalSigningEventIdMismatch::actual: nostr::event::id::EventId +pub radroots_nostr::error::RadrootsNostrError::ExternalSigningEventIdMismatch::expected: nostr::event::id::EventId +pub radroots_nostr::error::RadrootsNostrError::ExternalSigningEventInvalid(nostr::event::error::Error) +pub radroots_nostr::error::RadrootsNostrError::FilterTagError(alloc::string::String) +pub radroots_nostr::error::RadrootsNostrError::FoodAvailabilityEncode(radroots_event_codec::food_availability::authored::RadrootsFoodAvailabilityEncodeError) +pub radroots_nostr::error::RadrootsNostrError::FrozenDraftEventIdMismatch +pub radroots_nostr::error::RadrootsNostrError::FrozenDraftEventIdMismatch::actual_event_id: alloc::string::String +pub radroots_nostr::error::RadrootsNostrError::FrozenDraftEventIdMismatch::expected_event_id: alloc::string::String +pub radroots_nostr::error::RadrootsNostrError::FrozenDraftPubkeyMismatch +pub radroots_nostr::error::RadrootsNostrError::FrozenDraftPubkeyMismatch::actual_pubkey: alloc::string::String +pub radroots_nostr::error::RadrootsNostrError::FrozenDraftPubkeyMismatch::expected_pubkey: alloc::string::String +pub radroots_nostr::error::RadrootsNostrError::InvalidEncryptedSecretKey +pub radroots_nostr::error::RadrootsNostrError::InvalidNpub +pub radroots_nostr::error::RadrootsNostrError::InvalidPublicKey +pub radroots_nostr::error::RadrootsNostrError::InvalidSecretKey +pub radroots_nostr::error::RadrootsNostrError::KeyError(nostr::key::Error) +pub radroots_nostr::error::RadrootsNostrError::KindOutOfRange +pub radroots_nostr::error::RadrootsNostrError::KindOutOfRange::kind: u32 +pub radroots_nostr::error::RadrootsNostrError::KindOutOfRange::max: u16 +pub radroots_nostr::error::RadrootsNostrError::ProfileEncode(radroots_event_codec::profile::authored::RadrootsAuthoredProfileEncodeError) +pub radroots_nostr::error::RadrootsNostrError::SecretKeyDecryption +pub radroots_nostr::error::RadrootsNostrError::SecretKeyEncryption +pub radroots_nostr::error::RadrootsNostrError::SignedEvent(radroots_event::draft::SignedEventError) +pub radroots_nostr::error::RadrootsNostrError::TagConversion +pub radroots_nostr::error::RadrootsNostrError::TypedAuthoringRequired +pub radroots_nostr::error::RadrootsNostrError::TypedAuthoringRequired::kind: u16 +impl core::convert::From<nostr::event::builder::Error> for radroots_nostr::error::RadrootsNostrError +pub fn radroots_nostr::error::RadrootsNostrError::from(nostr::event::builder::Error) -> Self +impl core::convert::From<nostr::event::error::Error> for radroots_nostr::error::RadrootsNostrError +pub fn radroots_nostr::error::RadrootsNostrError::from(nostr::event::error::Error) -> Self +impl core::convert::From<nostr::key::Error> for radroots_nostr::error::RadrootsNostrError +pub fn radroots_nostr::error::RadrootsNostrError::from(nostr::key::Error) -> Self +pub enum radroots_nostr::error::RadrootsNostrTagsResolveError +pub radroots_nostr::error::RadrootsNostrTagsResolveError::DecryptionError(alloc::string::String) +pub radroots_nostr::error::RadrootsNostrTagsResolveError::MissingPTag(alloc::boxed::Box<nostr::event::Event>) +pub radroots_nostr::error::RadrootsNostrTagsResolveError::NotRecipient +pub radroots_nostr::error::RadrootsNostrTagsResolveError::ParseError(serde_json::error::Error) +pub mod radroots_nostr::event +pub struct radroots_nostr::event::RadrootsNostrExternalSigningRequest +impl radroots_nostr::types::RadrootsNostrExternalSigningRequest +pub fn radroots_nostr::types::RadrootsNostrExternalSigningRequest::complete(self, radroots_nostr::event::Event) -> core::result::Result<radroots_nostr::event::Event, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::types::RadrootsNostrExternalSigningRequest::expected_event_id(&self) -> radroots_nostr::event::EventId +pub fn radroots_nostr::types::RadrootsNostrExternalSigningRequest::expected_public_key(&self) -> radroots_nostr::types::RadrootsNostrPublicKey +impl serde_core::ser::Serialize for radroots_nostr::types::RadrootsNostrExternalSigningRequest +pub fn radroots_nostr::types::RadrootsNostrExternalSigningRequest::serialize<S>(&self, S) -> core::result::Result<<S as serde_core::ser::Serializer>::Ok, <S as serde_core::ser::Serializer>::Error> where S: serde_core::ser::Serializer +pub struct radroots_nostr::event::RadrootsNostrGenericEventBuilder +impl radroots_nostr::types::RadrootsNostrGenericEventBuilder +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::allow_self_tagging(self) -> Self +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::custom_created_at(self, radroots_nostr::event::Timestamp) -> Self +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::dedup_tags(self) -> Self +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::into_external_signing_request(self, radroots_nostr::types::RadrootsNostrPublicKey) -> core::result::Result<radroots_nostr::types::RadrootsNostrExternalSigningRequest, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::new(radroots_nostr::event::Kind, impl core::convert::Into<alloc::string::String>) -> Self +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::pow(self, u8) -> Self +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::sign_with_keys(self, &radroots_nostr::types::RadrootsNostrKeys) -> core::result::Result<radroots_nostr::event::Event, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::tag(self, radroots_nostr::tag::Tag) -> Self +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::tags<I>(self, I) -> Self where I: core::iter::traits::collect::IntoIterator<Item = radroots_nostr::tag::Tag> +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::text_note(impl core::convert::Into<alloc::string::String>) -> Self +pub fn radroots_nostr::event::coordinate_from_nostr(&radroots_nostr::event::Coordinate) -> core::result::Result<radroots_event::id::Nip01Coordinate, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::event::coordinate_to_nostr(&radroots_event::id::Nip01Coordinate) -> core::result::Result<radroots_nostr::event::Coordinate, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::event::nostr_event_from_radroots(&radroots_event::envelope::EventEnvelope) -> core::result::Result<radroots_nostr::event::Event, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::event::radroots_event_from_nostr(&radroots_nostr::event::Event) -> core::result::Result<radroots_event::envelope::EventEnvelope, radroots_event::envelope::EventEnvelopeError> +pub fn radroots_nostr::event::radroots_event_ptr_from_nostr(&radroots_nostr::event::Event) -> radroots_event::tag::EventPtr +pub type radroots_nostr::event::Coordinate = nostr::nips::nip01::Coordinate +pub type radroots_nostr::event::Event = nostr::event::Event +pub type radroots_nostr::event::EventId = nostr::event::id::EventId +pub type radroots_nostr::event::Kind = nostr::event::kind::Kind +pub type radroots_nostr::event::Metadata = nostr::nips::nip01::Metadata +pub type radroots_nostr::event::Timestamp = nostr::types::time::Timestamp +pub mod radroots_nostr::event_adapters +pub fn radroots_nostr::event_adapters::to_post_event_metadata(&radroots_nostr::event::Event) -> radroots_event_codec::parsed::RadrootsParsedData<radroots_event_codec::post::decode::LegacyPost> +pub fn radroots_nostr::event_adapters::to_profile_event_metadata(&radroots_nostr::event::Event) -> core::option::Option<radroots_event_codec::parsed::RadrootsParsedData<radroots_event_codec::profile::RadrootsProfileData>> +pub mod radroots_nostr::event_verify +pub enum radroots_nostr::event_verify::RadrootsNostrEventVerification +pub radroots_nostr::event_verify::RadrootsNostrEventVerification::IdMismatch +pub radroots_nostr::event_verify::RadrootsNostrEventVerification::IdVerified +pub radroots_nostr::event_verify::RadrootsNostrEventVerification::MalformedEnvelope +pub radroots_nostr::event_verify::RadrootsNostrEventVerification::SignatureInvalid +pub radroots_nostr::event_verify::RadrootsNostrEventVerification::Verified +pub struct radroots_nostr::event_verify::NostrSignatureVerifier +impl radroots_event::verification::SignatureVerifier for radroots_nostr::event_verify::NostrSignatureVerifier +pub fn radroots_nostr::event_verify::NostrSignatureVerifier::verify_signature(&self, &radroots_event::envelope::EventEnvelope) -> core::result::Result<(), radroots_event::verification::Error> +pub fn radroots_nostr::event_verify::radroots_nostr_verify_event(&radroots_event::envelope::EventEnvelope) -> radroots_nostr::event_verify::RadrootsNostrEventVerification +pub fn radroots_nostr::event_verify::radroots_nostr_verify_event_id(&radroots_event::envelope::EventEnvelope) -> radroots_nostr::event_verify::RadrootsNostrEventVerification +pub mod radroots_nostr::events +pub mod radroots_nostr::events::application_handler +pub struct radroots_nostr::events::application_handler::RadrootsNostrApplicationHandlerSpec +pub radroots_nostr::events::application_handler::RadrootsNostrApplicationHandlerSpec::extra_tags: alloc::vec::Vec<alloc::vec::Vec<alloc::string::String>> +pub radroots_nostr::events::application_handler::RadrootsNostrApplicationHandlerSpec::identifier: core::option::Option<alloc::string::String> +pub radroots_nostr::events::application_handler::RadrootsNostrApplicationHandlerSpec::kinds: alloc::vec::Vec<u32> +pub radroots_nostr::events::application_handler::RadrootsNostrApplicationHandlerSpec::metadata: core::option::Option<radroots_nostr::event::Metadata> +pub radroots_nostr::events::application_handler::RadrootsNostrApplicationHandlerSpec::nostrconnect_url: core::option::Option<alloc::string::String> +pub radroots_nostr::events::application_handler::RadrootsNostrApplicationHandlerSpec::relays: alloc::vec::Vec<alloc::string::String> +impl radroots_nostr::events::application_handler::RadrootsNostrApplicationHandlerSpec +pub fn radroots_nostr::events::application_handler::RadrootsNostrApplicationHandlerSpec::new(alloc::vec::Vec<u32>) -> Self +pub fn radroots_nostr::events::application_handler::radroots_nostr_build_application_handler_event(&radroots_nostr::events::application_handler::RadrootsNostrApplicationHandlerSpec) -> core::result::Result<radroots_nostr::types::RadrootsNostrGenericEventBuilder, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::events::application_handler::radroots_nostr_metadata_has_fields(&radroots_nostr::event::Metadata) -> bool +pub mod radroots_nostr::events::comment +pub struct radroots_nostr::events::comment::RadrootsNostrNip22CommentEventBuilder +impl radroots_nostr::events::comment::RadrootsNostrNip22CommentEventBuilder +pub fn radroots_nostr::events::comment::RadrootsNostrNip22CommentEventBuilder::custom_created_at(self, radroots_nostr::event::Timestamp) -> Self +pub fn radroots_nostr::events::comment::RadrootsNostrNip22CommentEventBuilder::sign_with_keys(self, &radroots_nostr::types::RadrootsNostrKeys) -> core::result::Result<radroots_nostr::event::Event, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::events::comment::radroots_nostr_build_nip22_comment_event(&radroots_event::post::comment::AuthoredNip22Comment) -> core::result::Result<radroots_nostr::events::comment::RadrootsNostrNip22CommentEventBuilder, radroots_nostr::error::RadrootsNostrError> +pub mod radroots_nostr::events::deletion +pub struct radroots_nostr::events::deletion::RadrootsNostrNip09DeletionRequestEventBuilder +impl radroots_nostr::events::deletion::RadrootsNostrNip09DeletionRequestEventBuilder +pub fn radroots_nostr::events::deletion::RadrootsNostrNip09DeletionRequestEventBuilder::custom_created_at(self, radroots_nostr::event::Timestamp) -> Self +pub fn radroots_nostr::events::deletion::RadrootsNostrNip09DeletionRequestEventBuilder::sign_with_keys(self, &radroots_nostr::types::RadrootsNostrKeys) -> core::result::Result<radroots_nostr::event::Event, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::events::deletion::radroots_nostr_build_nip09_deletion_request_event(&radroots_event::post::deletion::AuthoredNip09DeletionRequest) -> core::result::Result<radroots_nostr::events::deletion::RadrootsNostrNip09DeletionRequestEventBuilder, radroots_nostr::error::RadrootsNostrError> +pub mod radroots_nostr::events::food_availability +pub struct radroots_nostr::events::food_availability::RadrootsNostrFoodAvailabilityEventBuilder +impl radroots_nostr::events::food_availability::RadrootsNostrFoodAvailabilityEventBuilder +pub fn radroots_nostr::events::food_availability::RadrootsNostrFoodAvailabilityEventBuilder::sign_with_keys(self, &radroots_nostr::types::RadrootsNostrKeys) -> core::result::Result<radroots_nostr::event::Event, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::events::food_availability::radroots_nostr_build_food_availability_event(&radroots_event::food::availability::FoodAvailabilityDetails, radroots_nostr::event::Timestamp) -> core::result::Result<radroots_nostr::events::food_availability::RadrootsNostrFoodAvailabilityEventBuilder, radroots_nostr::error::RadrootsNostrError> +pub mod radroots_nostr::events::jobs +pub fn radroots_nostr::events::jobs::radroots_nostr_build_event_job_feedback(&radroots_nostr::event::Event, &str, core::option::Option<alloc::string::String>, core::option::Option<alloc::vec::Vec<radroots_nostr::tag::Tag>>) -> core::result::Result<radroots_nostr::types::RadrootsNostrGenericEventBuilder, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::events::jobs::radroots_nostr_build_event_job_result(&radroots_nostr::event::Event, impl core::convert::Into<alloc::string::String>, u64, core::option::Option<alloc::string::String>, core::option::Option<alloc::vec::Vec<radroots_nostr::tag::Tag>>) -> core::result::Result<radroots_nostr::types::RadrootsNostrGenericEventBuilder, radroots_nostr::error::RadrootsNostrError> +pub mod radroots_nostr::events::metadata +pub struct radroots_nostr::events::metadata::RadrootsNostrProfileEventBuilder +impl radroots_nostr::events::metadata::RadrootsNostrProfileEventBuilder +pub fn radroots_nostr::events::metadata::RadrootsNostrProfileEventBuilder::custom_created_at(self, radroots_nostr::event::Timestamp) -> Self +pub fn radroots_nostr::events::metadata::RadrootsNostrProfileEventBuilder::sign_with_keys(self, &radroots_nostr::types::RadrootsNostrKeys) -> core::result::Result<radroots_nostr::event::Event, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::events::metadata::radroots_nostr_build_profile_event(&radroots_event::profile::AuthoredProfile) -> core::result::Result<radroots_nostr::events::metadata::RadrootsNostrProfileEventBuilder, radroots_nostr::error::RadrootsNostrError> +pub mod radroots_nostr::events::post +pub struct radroots_nostr::events::post::RadrootsNostrPostEventBuilder +impl radroots_nostr::events::post::RadrootsNostrPostEventBuilder +pub fn radroots_nostr::events::post::RadrootsNostrPostEventBuilder::custom_created_at(self, radroots_nostr::event::Timestamp) -> Self +pub fn radroots_nostr::events::post::RadrootsNostrPostEventBuilder::sign_with_keys(self, &radroots_nostr::types::RadrootsNostrKeys) -> core::result::Result<radroots_nostr::event::Event, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::events::post::radroots_nostr_build_ask_event(&radroots_event::post::AuthoredAsk) -> core::result::Result<radroots_nostr::events::post::RadrootsNostrPostEventBuilder, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::events::post::radroots_nostr_build_photo_update_event(&radroots_event::post::AuthoredPhotoUpdate) -> core::result::Result<radroots_nostr::events::post::RadrootsNostrPostEventBuilder, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::events::post::radroots_nostr_build_update_event(&radroots_event::post::AuthoredUpdate) -> core::result::Result<radroots_nostr::events::post::RadrootsNostrPostEventBuilder, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::events::post::radroots_nostr_post_events_filter(core::option::Option<u16>, core::option::Option<u64>) -> radroots_nostr::filter::Filter +pub mod radroots_nostr::events::reply +pub struct radroots_nostr::events::reply::RadrootsNostrNip10ReplyEventBuilder +impl radroots_nostr::events::reply::RadrootsNostrNip10ReplyEventBuilder +pub fn radroots_nostr::events::reply::RadrootsNostrNip10ReplyEventBuilder::custom_created_at(self, radroots_nostr::event::Timestamp) -> Self +pub fn radroots_nostr::events::reply::RadrootsNostrNip10ReplyEventBuilder::sign_with_keys(self, &radroots_nostr::types::RadrootsNostrKeys) -> core::result::Result<radroots_nostr::event::Event, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::events::reply::radroots_nostr_build_nip10_reply_event(&radroots_event::post::reply::AuthoredNip10Reply) -> core::result::Result<radroots_nostr::events::reply::RadrootsNostrNip10ReplyEventBuilder, radroots_nostr::error::RadrootsNostrError> +pub mod radroots_nostr::filter +pub fn radroots_nostr::filter::radroots_nostr_filter_kind(u16) -> radroots_nostr::filter::Filter +pub fn radroots_nostr::filter::radroots_nostr_filter_new_events(radroots_nostr::filter::Filter) -> radroots_nostr::filter::Filter +pub fn radroots_nostr::filter::radroots_nostr_filter_tag(radroots_nostr::filter::Filter, &str, alloc::vec::Vec<alloc::string::String>) -> core::result::Result<radroots_nostr::filter::Filter, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::filter::radroots_nostr_kind(u16) -> radroots_nostr::event::Kind +pub type radroots_nostr::filter::Filter = nostr::filter::Filter +pub mod radroots_nostr::job_adapter +pub struct radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'a> +impl<'a> radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'a> +pub fn radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'a>::new(&'a radroots_nostr::event::Event) -> Self +impl radroots_event_codec::job::traits::JobEventLike for radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'_> +pub fn radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'_>::raw_author(&self) -> alloc::string::String +pub fn radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'_>::raw_content(&self) -> alloc::string::String +pub fn radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'_>::raw_id(&self) -> alloc::string::String +pub fn radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'_>::raw_kind(&self) -> u32 +pub fn radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'_>::raw_published_at(&self) -> u64 +pub fn radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'_>::raw_sig(&self) -> alloc::string::String +pub fn radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'_>::raw_tags(&self) -> alloc::vec::Vec<alloc::vec::Vec<alloc::string::String>> +impl<'a> radroots_event_codec::job::traits::JobEventBorrow<'a> for radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'a> +pub fn radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'a>::raw_author(&'a self) -> alloc::string::String +pub fn radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'a>::raw_content(&'a self) -> &'a str +pub fn radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'a>::raw_id(&'a self) -> alloc::string::String +pub fn radroots_nostr::job_adapter::RadrootsNostrEventAdapter<'a>::raw_kind(&'a self) -> u32 +pub mod radroots_nostr::key +pub enum radroots_nostr::key::Nip49KeySecurity +pub radroots_nostr::key::Nip49KeySecurity::Medium +pub radroots_nostr::key::Nip49KeySecurity::Unknown +pub radroots_nostr::key::Nip49KeySecurity::Weak +impl core::convert::From<radroots_nostr::key::Nip49KeySecurity> for nostr::nips::nip49::KeySecurity +pub fn nostr::nips::nip49::KeySecurity::from(radroots_nostr::key::Nip49KeySecurity) -> Self +pub struct radroots_nostr::key::Nip49Options +impl radroots_nostr::key::Nip49Options +pub const fn radroots_nostr::key::Nip49Options::key_security(self) -> radroots_nostr::key::Nip49KeySecurity +pub const fn radroots_nostr::key::Nip49Options::log_n(self) -> u8 +pub const fn radroots_nostr::key::Nip49Options::new(u8, radroots_nostr::key::Nip49KeySecurity) -> Self +impl core::default::Default for radroots_nostr::key::Nip49Options +pub fn radroots_nostr::key::Nip49Options::default() -> Self +pub struct radroots_nostr::key::SecretKey +impl radroots_nostr::key::SecretKey +pub fn radroots_nostr::key::SecretKey::generate() -> Self +pub fn radroots_nostr::key::SecretKey::parse(&str) -> core::result::Result<Self, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::key::SecretKey::public_key(&self) -> core::result::Result<radroots_identity::key::PublicKey, radroots_nostr::error::RadrootsNostrError> +impl core::fmt::Debug for radroots_nostr::key::SecretKey +pub fn radroots_nostr::key::SecretKey::fmt(&self, &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub fn radroots_nostr::key::decrypt_secret_key_nip49(&str, &str) -> core::result::Result<radroots_nostr::key::SecretKey, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::key::encrypt_secret_key_nip49(&radroots_nostr::key::SecretKey, &str) -> core::result::Result<alloc::string::String, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::key::encrypt_secret_key_nip49_with_options(&radroots_nostr::key::SecretKey, &str, radroots_nostr::key::Nip49Options) -> core::result::Result<alloc::string::String, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::key::parse_public_key(&str) -> core::result::Result<radroots_identity::key::PublicKey, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::key::parse_secret_key(&str) -> core::result::Result<radroots_nostr::key::SecretKey, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::key::public_key_from_nostr(nostr::key::public_key::PublicKey) -> core::result::Result<radroots_identity::key::PublicKey, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::key::public_key_from_npub(&str) -> core::result::Result<radroots_identity::key::PublicKey, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::key::public_key_to_nostr(radroots_identity::key::PublicKey) -> core::result::Result<nostr::key::public_key::PublicKey, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::key::public_key_to_npub(radroots_identity::key::PublicKey) -> core::result::Result<alloc::string::String, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::key::secret_key_to_nsec(&radroots_nostr::key::SecretKey) -> alloc::string::String +pub mod radroots_nostr::nip17 +#[non_exhaustive] pub enum radroots_nostr::nip17::RadrootsNip17Error +pub radroots_nostr::nip17::RadrootsNip17Error::GiftWrap +pub radroots_nostr::nip17::RadrootsNip17Error::InvalidRecipient +pub radroots_nostr::nip17::RadrootsNip17Error::MessageDecode +pub radroots_nostr::nip17::RadrootsNip17Error::MessageEncode +pub radroots_nostr::nip17::RadrootsNip17Error::Signer +pub radroots_nostr::nip17::RadrootsNip17Error::UnsupportedRumorKind +pub radroots_nostr::nip17::RadrootsNip17Error::UnsupportedRumorKind::kind: u32 +impl radroots_nostr::nip17::RadrootsNip17Error +pub const fn radroots_nostr::nip17::RadrootsNip17Error::code(&self) -> &'static str +impl core::convert::From<nostr::event::builder::Error> for radroots_nostr::nip17::RadrootsNip17Error +pub fn radroots_nostr::nip17::RadrootsNip17Error::from(nostr::event::builder::Error) -> Self +impl core::convert::From<nostr::key::Error> for radroots_nostr::nip17::RadrootsNip17Error +pub fn radroots_nostr::nip17::RadrootsNip17Error::from(nostr::key::Error) -> Self +impl core::convert::From<nostr::nips::nip59::Error> for radroots_nostr::nip17::RadrootsNip17Error +pub fn radroots_nostr::nip17::RadrootsNip17Error::from(nostr::nips::nip59::Error) -> Self +impl core::convert::From<nostr::signer::SignerError> for radroots_nostr::nip17::RadrootsNip17Error +pub fn radroots_nostr::nip17::RadrootsNip17Error::from(nostr::signer::SignerError) -> Self +impl core::convert::From<radroots_event_codec::error::EventEncodeError> for radroots_nostr::nip17::RadrootsNip17Error +pub fn radroots_nostr::nip17::RadrootsNip17Error::from(radroots_event_codec::error::EventEncodeError) -> Self +impl core::convert::From<radroots_event_codec::error::EventParseError> for radroots_nostr::nip17::RadrootsNip17Error +pub fn radroots_nostr::nip17::RadrootsNip17Error::from(radroots_event_codec::error::EventParseError) -> Self +impl core::error::Error for radroots_nostr::nip17::RadrootsNip17Error +impl core::fmt::Display for radroots_nostr::nip17::RadrootsNip17Error +pub fn radroots_nostr::nip17::RadrootsNip17Error::fmt(&self, &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub enum radroots_nostr::nip17::RadrootsNip17Rumor +pub radroots_nostr::nip17::RadrootsNip17Rumor::Message(radroots_event_codec::parsed::RadrootsParsedData<radroots_event::social::message::Message>) +pub radroots_nostr::nip17::RadrootsNip17Rumor::MessageFile(alloc::boxed::Box<radroots_event_codec::parsed::RadrootsParsedData<radroots_event::social::message_file::MessageFile>>) +impl core::fmt::Debug for radroots_nostr::nip17::RadrootsNip17Rumor +pub fn radroots_nostr::nip17::RadrootsNip17Rumor::fmt(&self, &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub struct radroots_nostr::nip17::RadrootsNip17WrapOptions +pub radroots_nostr::nip17::RadrootsNip17WrapOptions::gift_wrap_tags: alloc::vec::Vec<alloc::vec::Vec<alloc::string::String>> +pub radroots_nostr::nip17::RadrootsNip17WrapOptions::include_sender: bool +pub radroots_nostr::nip17::RadrootsNip17WrapOptions::rumor_created_at: core::option::Option<u64> +impl core::default::Default for radroots_nostr::nip17::RadrootsNip17WrapOptions +pub fn radroots_nostr::nip17::RadrootsNip17WrapOptions::default() -> Self +pub async fn radroots_nostr::nip17::radroots_nostr_unwrap_gift_wrap<T>(&T, &nostr::event::Event) -> core::result::Result<radroots_nostr::nip17::RadrootsNip17Rumor, radroots_nostr::nip17::RadrootsNip17Error> where T: nostr::signer::NostrSigner +pub async fn radroots_nostr::nip17::radroots_nostr_wrap_message<T>(&T, &radroots_event::social::message::Message, radroots_nostr::nip17::RadrootsNip17WrapOptions) -> core::result::Result<alloc::vec::Vec<nostr::event::Event>, radroots_nostr::nip17::RadrootsNip17Error> where T: nostr::signer::NostrSigner +pub async fn radroots_nostr::nip17::radroots_nostr_wrap_message_file<T>(&T, &radroots_event::social::message_file::MessageFile, radroots_nostr::nip17::RadrootsNip17WrapOptions) -> core::result::Result<alloc::vec::Vec<nostr::event::Event>, radroots_nostr::nip17::RadrootsNip17Error> where T: nostr::signer::NostrSigner +pub mod radroots_nostr::signing +pub struct radroots_nostr::signing::LocalSigner +impl radroots_nostr::signing::LocalSigner +pub fn radroots_nostr::signing::LocalSigner::generate() -> core::result::Result<Self, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::signing::LocalSigner::new(radroots_nostr::key::SecretKey) -> core::result::Result<Self, radroots_nostr::error::RadrootsNostrError> +pub const fn radroots_nostr::signing::LocalSigner::public_key(&self) -> radroots_identity::key::PublicKey +impl core::fmt::Debug for radroots_nostr::signing::LocalSigner +pub fn radroots_nostr::signing::LocalSigner::fmt(&self, &mut core::fmt::Formatter<'_>) -> core::fmt::Result +impl radroots_signing::signer::Signer for radroots_nostr::signing::LocalSigner +pub fn radroots_nostr::signing::LocalSigner::sign(&self, radroots_signing::request::SignRequest) -> radroots_signing::signer::BoxFuture<'_, core::result::Result<radroots_signing::receipt::SignReceipt, radroots_signing::error::Error>> +pub fn radroots_nostr::signing::LocalSigner::status(&self) -> radroots_signing::signer::BoxFuture<'_, core::result::Result<radroots_signing::status::SignerStatus, radroots_signing::error::Error>> +pub mod radroots_nostr::tag +pub fn radroots_nostr::tag::from_parts(alloc::vec::Vec<alloc::string::String>) -> core::result::Result<radroots_nostr::tag::Tag, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::tag::radroots_nostr_tag_at_value(&radroots_nostr::tag::Tag, usize) -> core::option::Option<alloc::string::String> +pub fn radroots_nostr::tag::radroots_nostr_tag_first_value(&radroots_nostr::tag::Tag, &str) -> core::option::Option<alloc::string::String> +pub fn radroots_nostr::tag::radroots_nostr_tag_match_geohash(&radroots_nostr::tag::Tag) -> core::option::Option<alloc::string::String> +pub fn radroots_nostr::tag::radroots_nostr_tag_match_l(&radroots_nostr::tag::Tag) -> core::option::Option<(&str, f64)> +pub fn radroots_nostr::tag::radroots_nostr_tag_match_location(&radroots_nostr::tag::Tag) -> core::option::Option<(&str, &str, &str)> +pub fn radroots_nostr::tag::radroots_nostr_tag_match_summary(&radroots_nostr::tag::Tag) -> core::option::Option<alloc::string::String> +pub fn radroots_nostr::tag::radroots_nostr_tag_match_title(&radroots_nostr::tag::Tag) -> core::option::Option<alloc::string::String> +pub fn radroots_nostr::tag::radroots_nostr_tag_relays_parse(&radroots_nostr::tag::Tag) -> core::option::Option<&alloc::vec::Vec<radroots_nostr::types::RadrootsNostrRelayUrl>> +pub fn radroots_nostr::tag::radroots_nostr_tag_slice(&radroots_nostr::tag::Tag, usize) -> core::option::Option<alloc::vec::Vec<alloc::string::String>> +pub fn radroots_nostr::tag::radroots_nostr_tags_match(&radroots_nostr::tag::Tag) -> core::option::Option<(&str, &[alloc::string::String])> +pub fn radroots_nostr::tag::radroots_nostr_tags_resolve(&radroots_nostr::event::Event, &radroots_nostr::types::RadrootsNostrKeys) -> core::result::Result<alloc::vec::Vec<radroots_nostr::tag::Tag>, radroots_nostr::error::RadrootsNostrTagsResolveError> +pub fn radroots_nostr::tag::to_parts(&radroots_nostr::tag::Tag) -> alloc::vec::Vec<alloc::string::String> +pub type radroots_nostr::tag::Tag = nostr::event::tag::Tag +pub type radroots_nostr::tag::TagKind<'a> = nostr::event::tag::kind::TagKind<'a> +pub type radroots_nostr::tag::TagStandard = nostr::event::tag::standard::TagStandard +pub mod radroots_nostr::types +pub use radroots_nostr::types::RadrootsNostrFromBech32 +pub use radroots_nostr::types::RadrootsNostrSecp256k1SecretKey +pub use radroots_nostr::types::RadrootsNostrToBech32 +pub struct radroots_nostr::types::RadrootsNostrExternalSigningRequest +impl radroots_nostr::types::RadrootsNostrExternalSigningRequest +pub fn radroots_nostr::types::RadrootsNostrExternalSigningRequest::complete(self, radroots_nostr::event::Event) -> core::result::Result<radroots_nostr::event::Event, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::types::RadrootsNostrExternalSigningRequest::expected_event_id(&self) -> radroots_nostr::event::EventId +pub fn radroots_nostr::types::RadrootsNostrExternalSigningRequest::expected_public_key(&self) -> radroots_nostr::types::RadrootsNostrPublicKey +impl serde_core::ser::Serialize for radroots_nostr::types::RadrootsNostrExternalSigningRequest +pub fn radroots_nostr::types::RadrootsNostrExternalSigningRequest::serialize<S>(&self, S) -> core::result::Result<<S as serde_core::ser::Serializer>::Ok, <S as serde_core::ser::Serializer>::Error> where S: serde_core::ser::Serializer +pub struct radroots_nostr::types::RadrootsNostrGenericEventBuilder +impl radroots_nostr::types::RadrootsNostrGenericEventBuilder +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::allow_self_tagging(self) -> Self +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::custom_created_at(self, radroots_nostr::event::Timestamp) -> Self +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::dedup_tags(self) -> Self +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::into_external_signing_request(self, radroots_nostr::types::RadrootsNostrPublicKey) -> core::result::Result<radroots_nostr::types::RadrootsNostrExternalSigningRequest, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::new(radroots_nostr::event::Kind, impl core::convert::Into<alloc::string::String>) -> Self +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::pow(self, u8) -> Self +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::sign_with_keys(self, &radroots_nostr::types::RadrootsNostrKeys) -> core::result::Result<radroots_nostr::event::Event, radroots_nostr::error::RadrootsNostrError> +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::tag(self, radroots_nostr::tag::Tag) -> Self +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::tags<I>(self, I) -> Self where I: core::iter::traits::collect::IntoIterator<Item = radroots_nostr::tag::Tag> +pub fn radroots_nostr::types::RadrootsNostrGenericEventBuilder::text_note(impl core::convert::Into<alloc::string::String>) -> Self +pub type radroots_nostr::types::RadrootsNostrKeys = nostr::key::Keys +pub type radroots_nostr::types::RadrootsNostrPublicKey = nostr::key::public_key::PublicKey +pub type radroots_nostr::types::RadrootsNostrRelayUrl = nostr::types::url::RelayUrl +pub type radroots_nostr::types::RadrootsNostrSecretKey = nostr::key::secret_key::SecretKey +pub type radroots_nostr::types::RadrootsNostrSubscriptionId = nostr::message::SubscriptionId +pub type radroots_nostr::types::RadrootsNostrUrl = url::Url +pub mod radroots_nostr::util +pub fn radroots_nostr::util::created_at_u32_saturating(radroots_nostr::event::Timestamp) -> u32 +pub fn radroots_nostr::util::event_created_at_u32_saturating(&radroots_nostr::event::Event) -> u32 +pub enum radroots_nostr::Error +pub radroots_nostr::Error::CoordinateConversion +pub radroots_nostr::Error::DraftError(radroots_event::draft::DraftError) +pub radroots_nostr::Error::EventBuildError(nostr::event::builder::Error) +pub radroots_nostr::Error::EventConversion +pub radroots_nostr::Error::EventConversion::field: &'static str +pub radroots_nostr::Error::EventError(nostr::event::error::Error) +pub radroots_nostr::Error::EventWire(radroots_event::wire::v1::EventWireError) +pub radroots_nostr::Error::ExternalSigningAuthorMismatch +pub radroots_nostr::Error::ExternalSigningAuthorMismatch::actual: nostr::key::public_key::PublicKey +pub radroots_nostr::Error::ExternalSigningAuthorMismatch::expected: nostr::key::public_key::PublicKey +pub radroots_nostr::Error::ExternalSigningEventIdMismatch +pub radroots_nostr::Error::ExternalSigningEventIdMismatch::actual: nostr::event::id::EventId +pub radroots_nostr::Error::ExternalSigningEventIdMismatch::expected: nostr::event::id::EventId +pub radroots_nostr::Error::ExternalSigningEventInvalid(nostr::event::error::Error) +pub radroots_nostr::Error::FilterTagError(alloc::string::String) +pub radroots_nostr::Error::FoodAvailabilityEncode(radroots_event_codec::food_availability::authored::RadrootsFoodAvailabilityEncodeError) +pub radroots_nostr::Error::FrozenDraftEventIdMismatch +pub radroots_nostr::Error::FrozenDraftEventIdMismatch::actual_event_id: alloc::string::String +pub radroots_nostr::Error::FrozenDraftEventIdMismatch::expected_event_id: alloc::string::String +pub radroots_nostr::Error::FrozenDraftPubkeyMismatch +pub radroots_nostr::Error::FrozenDraftPubkeyMismatch::actual_pubkey: alloc::string::String +pub radroots_nostr::Error::FrozenDraftPubkeyMismatch::expected_pubkey: alloc::string::String +pub radroots_nostr::Error::InvalidEncryptedSecretKey +pub radroots_nostr::Error::InvalidNpub +pub radroots_nostr::Error::InvalidPublicKey +pub radroots_nostr::Error::InvalidSecretKey +pub radroots_nostr::Error::KeyError(nostr::key::Error) +pub radroots_nostr::Error::KindOutOfRange +pub radroots_nostr::Error::KindOutOfRange::kind: u32 +pub radroots_nostr::Error::KindOutOfRange::max: u16 +pub radroots_nostr::Error::ProfileEncode(radroots_event_codec::profile::authored::RadrootsAuthoredProfileEncodeError) +pub radroots_nostr::Error::SecretKeyDecryption +pub radroots_nostr::Error::SecretKeyEncryption +pub radroots_nostr::Error::SignedEvent(radroots_event::draft::SignedEventError) +pub radroots_nostr::Error::TagConversion +pub radroots_nostr::Error::TypedAuthoringRequired +pub radroots_nostr::Error::TypedAuthoringRequired::kind: u16 +impl core::convert::From<nostr::event::builder::Error> for radroots_nostr::error::RadrootsNostrError +pub fn radroots_nostr::error::RadrootsNostrError::from(nostr::event::builder::Error) -> Self +impl core::convert::From<nostr::event::error::Error> for radroots_nostr::error::RadrootsNostrError +pub fn radroots_nostr::error::RadrootsNostrError::from(nostr::event::error::Error) -> Self +impl core::convert::From<nostr::key::Error> for radroots_nostr::error::RadrootsNostrError +pub fn radroots_nostr::error::RadrootsNostrError::from(nostr::key::Error) -> Self