Setting Circles Profiles (Rust)
Profiles are read-only until runner support is added. You can fetch profiles via circles_query or helper tables.
Fetch profiles by avatar
use circles_rpc::QueryMethods;
use circles_types::{Address, FilterPredicate, OrderBy, QueryParams};
use reqwest::Url;
#[derive(Debug, Clone, serde::Deserialize)]
struct ProfileRow {
avatar: Address,
name: Option<String>,
description: Option<String>,
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let client = circles_rpc::RpcClient::http(Url::parse("https://rpc.aboutcircles.com/")?);
let queries = QueryMethods::new(client);
let params = QueryParams {
namespace: "circles".into(),
table: "profiles".into(),
columns: vec!["avatar".into(), "name".into(), "description".into()],
filter: vec![FilterPredicate::equals(
"avatar".into(),
"0x1234567890123456789012345678901234567890",
)
.into()],
order: vec![OrderBy::desc("blockNumber".into())],
limit: Some(5),
};
let rows: Vec<ProfileRow> = queries.circles_query(params).await?;
println!("profiles: {rows:?}");
Ok(())
}Find profiles by name prefix
use circles_rpc::QueryMethods;
use circles_types::{FilterPredicate, QueryParams};
use reqwest::Url;
#[derive(Debug, Clone, serde::Deserialize)]
struct ProfileRow {
avatar: String,
name: Option<String>,
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let client = circles_rpc::RpcClient::http(Url::parse("https://rpc.aboutcircles.com/")?);
let queries = QueryMethods::new(client);
let params = QueryParams {
namespace: "circles".into(),
table: "profiles".into(),
columns: vec!["avatar".into(), "name".into()],
filter: vec![FilterPredicate::like("name".into(), "Alice%".into()).into()],
order: vec![],
limit: Some(10),
};
let rows: Vec<ProfileRow> = queries.circles_query(params).await?;
for row in rows {
println!("{} => {:?}", row.avatar, row.name);
}
Ok(())
}Updating profiles is runner-dependent and will be added once write support is available.