Skip to content

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.