# client-uploader-traits
[](https://github.com/LucaCappelletti94/client-uploader-traits/actions/workflows/ci.yml)
[](https://crates.io/crates/client-uploader-traits)
[](https://docs.rs/client-uploader-traits)
[](https://github.com/LucaCappelletti94/client-uploader-traits/blob/main/LICENSE)
[](https://www.rust-lang.org)
Traits defining a common generic traits surface for uploader clients such as `zenodo-rs`, `internetarchive-rs`, and `figshare-rs`.
It covers:
- client configuration
- upload, file, and resource inspection
- public lookup, search, and download capabilities
- create/update publication workflows
- publication outcome and search-result inspection
- small generic helpers and a `prelude`
```rust
use client_uploader_traits::{
CreatePublication, CreatePublicationRequest, PublicationOutcome,
};
async fn publish<C>(
client: &C,
request: CreatePublicationRequest<C::CreateTarget, C::Metadata, C::Upload>,
) -> Result<C::Output, C::Error>
where
C: CreatePublication,
C::Output: PublicationOutcome,
{
client.create_publication(request).await
}
```
This crate is intentionally self-contained. Real conformance tests against concrete client crates should live in those crates.