Skip to content

Find Groups and Memberships

Read-only queries for groups and memberships.

use circles_rpc::{QueryMethods, RpcClient};
use circles_types::{FilterPredicate, GroupMembershipRow, OrderBy, QueryParams};
use reqwest::Url;
 
#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let client = RpcClient::http(Url::parse("https://rpc.aboutcircles.com/")?);
    let queries = QueryMethods::new(client);
 
    let groups: Vec<circles_types::GroupRow> = queries
        .circles_query(QueryParams {
            namespace: "circles".into(),
            table: "groups".into(),
            columns: vec!["group".into(), "name".into(), "symbol".into()],
            filter: vec![],
            order: vec![OrderBy::asc("group".into())],
            limit: Some(10),
        })
        .await?;
 
    let memberships: Vec<GroupMembershipRow> = queries
        .circles_query(QueryParams {
            namespace: "circles".into(),
            table: "groupMemberships".into(),
            columns: vec!["group".into(), "member".into(), "timestamp".into()],
            filter: vec![FilterPredicate::equals(
                "member".into(),
                "0x1234567890123456789012345678901234567890",
            )
            .into()],
            order: vec![OrderBy::desc("timestamp".into())],
            limit: Some(20),
        })
        .await?;
 
    println!("groups: {}", groups.len());
    println!("memberships: {}", memberships.len());
    Ok(())
}