Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

JMAP client library for Rust

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
NotificationsYou must be signed in to change notification settings

stalwartlabs/jmap-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

79 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

crates.iobuilddocs.rscrates.io

jmap-client is aJSON Meta Application Protocol (JMAP) library written in Rust. The library is a full implementation of the JMAP RFCs including:

Features:

  • Async and blocking support (use the cargo featureblocking to enable blocking).
  • WebSocket async streams (use the cargo featurewebsockets to enable JMAP over WebSocket).
  • EventSource async streams.
  • Helper functions to reduce boilerplate code and quickly build JMAP requests.
  • Fast parsing and encoding of JMAP requests.

Usage Example

// Connect to the JMAP server using Basic authentication.// (just for demonstration purposes, Bearer tokens should be used instead)let client =Client::new().credentials(("john@example.org","secret")).connect("https://jmap.example.org").await.unwrap();// Create a mailbox.let mailbox_id = client.mailbox_create("My Mailbox",None::<String>,Role::None).await.unwrap().take_id();// Import a message into the mailbox.client.email_import(b"From: john@example.org\nSubject: test\n\n test".to_vec(),[&mailbox_id],["$draft"].into(),None,).await.unwrap();// Obtain all e-mail ids matching a filter.let email_id = client.email_query(Filter::and([            email::query::Filter::subject("test"),            email::query::Filter::in_mailbox(&mailbox_id),            email::query::Filter::has_keyword("$draft"),]).into(),[email::query::Comparator::from()].into(),).await.unwrap().take_ids().pop().unwrap();// Fetch an e-mail message.let email = client.email_get(&email_id,[Property::Subject,Property::Preview,Property::Keywords].into(),).await.unwrap().unwrap();assert_eq!(email.preview().unwrap(),"test");assert_eq!(email.subject().unwrap(),"test");assert_eq!(email.keywords(),["$draft"]);// Fetch only the updated properties of all mailboxes that changed// since a state.letmut request = client.build();let changes_request = request.changes_mailbox("n").max_changes(0);let properties_ref = changes_request.updated_properties_reference();let updated_ref = changes_request.updated_reference();request.get_mailbox().ids_ref(updated_ref).properties_ref(properties_ref);for mailboxin request.send().await.unwrap().unwrap_method_responses().pop().unwrap().unwrap_get_mailbox().unwrap().take_list(){println!("Changed mailbox: {:#?}", mailbox);}// Delete the mailbox including any messagesclient.mailbox_destroy(&mailbox_id,true).await.unwrap();// Open an EventSource connection with the JMAP server.letmut stream = client.event_source([TypeState::Email,TypeState::EmailDelivery,TypeState::Mailbox,TypeState::EmailSubmission,TypeState::Identity,].into(),false,60.into(),None,).await.unwrap();// Consume events received over EventSource.whileletSome(event) = stream.next().await{let changes = event.unwrap();println!("-> Change id: {:?}", changes.id());for account_idin changes.changed_accounts(){println!(" Account {} has changes:", account_id);ifletSome(account_changes) = changes.changes(account_id){for(type_state, state_id)in account_changes{println!("   Type {:?} has a new state {}.", type_state, state_id);}}}}

More examples available under theexamples directory.

Testing

To run the testsuite:

 $ cargotest --all-features

Conformed RFCs

License

Licensed under either of

at your option.

Copyright

Copyright (C) 2022, Stalwart Labs Ltd.

About

JMAP client library for Rust

Topics

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Code of conduct

Security policy

Stars

Watchers

Forks

Sponsor this project

 

Contributors3

  •  
  •  
  •  

Languages


[8]ページ先頭

©2009-2025 Movatter.jp