···11+//! EDS (Evolution Data Server) Rust bindings and utilities
22+//!
33+//! This library provides safe Rust wrappers around Evolution Data Server
44+//! C APIs for calendar and event management.
55+66+pub mod constants;
77+mod ffi;
88+mod event;
99+mod core;
1010+1111+// Re-export commonly used types for convenience
1212+pub use core::{CalendarClient, EdsError, GLibVersion, Result, Source, SourceRegistry};
1313+pub use event::{Event, EventTime};
···11-// Evolution Data Server module
22-33-mod core;
44-mod event;
55-mod ffi;
66-77-// Re-export public API
88-pub use core::{CalendarClient, EdsError, GLibVersion, Result, Source, SourceRegistry};
99-pub use event::{Event, EventTime};
+7-9
src/main.rs
crates/eds-cal-cli/src/main.rs
···11-mod constants;
22-mod eds;
33-41use clap::{Parser, Subcommand};
22+use eds_cal_rs::{CalendarClient, EventTime, GLibVersion, SourceRegistry};
5364#[derive(Parser)]
75#[command(name = "eds-cli")]
···4139}
42404341fn print_version() {
4444- let version = eds::GLibVersion::get();
4242+ let version = GLibVersion::get();
4543 println!("Evolution Data Server Calendar");
4644 println!("Library version info:");
4745 println!(
···5149}
52505351fn list_sources() -> i32 {
5454- let registry = match eds::SourceRegistry::new() {
5252+ let registry = match SourceRegistry::new() {
5553 Ok(reg) => reg,
5654 Err(e) => {
5755 eprintln!("Failed to create source registry: {}", e);
···7977}
80788179fn list_events() -> i32 {
8282- let registry = match eds::SourceRegistry::new() {
8080+ let registry = match SourceRegistry::new() {
8381 Ok(reg) => reg,
8482 Err(e) => {
8583 eprintln!("Failed to create source registry: {}", e);
···106104 for source in sources {
107105 let display_name = source.display_name();
108106109109- let client = match eds::CalendarClient::connect(&source) {
107107+ let client = match CalendarClient::connect(&source) {
110108 Ok(client) => client,
111109 Err(e) => {
112110 eprintln!("Failed to connect to calendar '{}': {}", display_name, e);
···124122125123 for event in events {
126124 let (start_str, end_str) = match (&event.start, &event.end) {
127127- (eds::EventTime::Date(start_date), eds::EventTime::Date(end_date)) => {
125125+ (EventTime::Date(start_date), EventTime::Date(end_date)) => {
128126 // All-day event
129127 let start = start_date.format("%Y-%m-%d").to_string();
130128 let end = if start_date == end_date {
···134132 };
135133 (start, end)
136134 }
137137- (eds::EventTime::DateTime(start_dt), eds::EventTime::DateTime(end_dt)) => {
135135+ (EventTime::DateTime(start_dt), EventTime::DateTime(end_dt)) => {
138136 // Timed event
139137 let start = start_dt.format("%Y-%m-%d %H:%M").to_string();
140138 let end = end_dt.format("%H:%M").to_string();