Utilizing CirclesQuery (Rust Equivalent)
circles_types provides the query DSL (QueryParams, FilterPredicate, Filter, OrderBy, SortOrder, PagedQueryParams). Use it with circles_rpc::QueryMethods.
use circles_rpc::{QueryMethods, RpcClient};
use circles_types::{Conjunction, ConjunctionType, Filter, FilterPredicate, OrderBy, QueryParams};
use reqwest::Url;
use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
struct ProfileRow {
avatar: String,
name: Option<String>,
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let client = RpcClient::http(Url::parse("https://rpc.aboutcircles.com/")?);
let queries = QueryMethods::new(client);
let filter = Conjunction::and(vec![
FilterPredicate::like("name".into(), "Al%".into()).into(),
FilterPredicate::equals(
"avatar".into(),
"0x1234567890123456789012345678901234567890",
)
.into(),
])
.into();
let params = QueryParams {
namespace: "circles".into(),
table: "profiles".into(),
columns: vec!["avatar".into(), "name".into()],
filter: vec![filter],
order: vec![OrderBy::asc("avatar".into())],
limit: Some(20),
};
let rows: Vec<ProfileRow> = queries.circles_query(params).await?;
println!("rows: {}", rows.len());
Ok(())
}