Thank you for being patient! We're working hard on resolving the issue
| Convention | Examples |
|---|---|
<Provider> (Integration marker) | Garmin, Whoop, GoogleCalendar, Weather |
<Provider>Client (grab-bag) | GarminClient { http: Arc<Client> } |
<Provider>BackendDeps (connector deps trait) | GarminBackendDeps, WeatherBackendDeps, WeatherLogsDeps |
<Provider>Auth (auth marker) | GarminAuth, GoogleAuth, WhoopAuth |
<Provider>Params (path params) | GarminParams { auth_id: String } |
<Provider>SyncProvider / Executor | GarminSyncProvider, WhoopSyncExecutor |
<Provider>SyncDeps (sync-plugin deps) | GarminSyncDeps, WhoopSyncDeps |
<Provider>ApiContext (auth/client resolver) | GarminApiContext, WhoopApiContext |
RowSyncState (per-row sync state) | identical struct in each provider's sync_plugin/state.rs |
BackendDepsReach for these standard names when applicable:
persist_cells(row_id, cells) — write a batch of cells.recent_log_cells(owner, lookup_key) — read the recent log
cells for a :logs row.forked_row(user_id, lookup_key) — resolve the row's existing
state, materialising if absent.update_synced_range(row_id, range) — merge a synced range
into the row's metadata.If you need a method that doesn't fit one of these patterns,
err toward more specific names (e.g.
run_calendar_sync / create_calendar_event) — the host docs
will reference these names directly so clarity matters more than
brevity.
tento-myprovider/
├── Cargo.toml
└── src/
├── lib.rs
├── connector/
│ ├── mod.rs
│ ├── <metric_a>/
│ │ ├── mod.rs
│ │ └── logs.rs
│ └── <metric_b>/
│ ├── mod.rs
│ └── logs.rs
└── sync_plugin/ (optional)
├── mod.rs
├── context.rs
├── deps.rs
├── executor.rs
├── provider.rs
└── state.rs
Each mod.rs ends with #![deny(missing_docs)] to enforce
docstring coverage on public items.
If your provider has only one row family, you can skip the
per-metric subdirectory and put Row impls directly in
connector/. See tento-weather/src/connector/{mod,logs}.rs for
that flatter shape.