1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
//! # Rocksky — async Rust SDK for the [Rocksky] XRPC API.
//!
//! [Rocksky]: https://rocksky.app
//!
//! - **Async-first** (`tokio` + `reqwest`)
//! - **Typed** — every common entity is a strongly typed `serde` struct
//! - **Idiomatic** — namespaced accessors: `client.actor()`, `client.scrobble()`, …
//! - **Escape hatch** — `client.call()` (query) / `client.procedure()` for any
//! method not yet wrapped
//! - **Pipe-friendly** — every response type round-trips through `serde_json`,
//! so you can stream results straight to `stdout` / shell pipelines.
//!
//! ## Quickstart
//!
//! ```no_run
//! use rocksky::Client;
//!
//! # async fn run() -> rocksky::Result<()> {
//! let client = Client::new();
//! let profile = client.actor().get_profile("alice.bsky.social").await?;
//! println!(
//! "{} — {}",
//! profile.display_name.as_deref().unwrap_or(""),
//! profile.did.as_deref().unwrap_or(""),
//! );
//!
//! let did = profile.did.clone().unwrap_or_default();
//! let scrobbles = client.scrobble().list().did(did).limit(10).send().await?;
//! for s in scrobbles {
//! println!(
//! " {} — {}",
//! s.artist.as_deref().unwrap_or("?"),
//! s.title.as_deref().unwrap_or("?"),
//! );
//! }
//! # Ok(()) }
//! ```
//!
//! Authenticated calls take a bearer token:
//!
//! ```no_run
//! # use rocksky::Client;
//! let client = Client::builder().token("eyJhbGciOi…").build();
//! ```
pub use ;
pub use ;
pub use *;
pub use FollowList;