Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hoverbear/digitalocean
A prototype API for Digital Ocean.
https://github.com/hoverbear/digitalocean
api api-wrapper digitalocean provisioning rust-library
Last synced: 16 days ago
JSON representation
A prototype API for Digital Ocean.
- Host: GitHub
- URL: https://github.com/hoverbear/digitalocean
- Owner: Hoverbear
- License: mit
- Created: 2017-04-13T15:38:03.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-10-24T17:38:21.000Z (about 1 year ago)
- Last Synced: 2024-10-11T23:42:10.453Z (about 1 month ago)
- Topics: api, api-wrapper, digitalocean, provisioning, rust-library
- Language: Rust
- Homepage: https://docs.rs/crate/digitalocean/
- Size: 304 KB
- Stars: 37
- Watchers: 5
- Forks: 11
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# DigitalOcean
[![Build Status](https://travis-ci.org/Hoverbear/digitalocean.svg?branch=master)](https://travis-ci.org/Hoverbear/digitalocean)
[![Crates.io](https://img.shields.io/crates/v/digitalocean.svg)](https://crates.io/crates/digitalocean)A crate for interacting with the Digital Ocean API.
While browsing this documentation, please feel encouraged to reference the
[DigitalOcean docs](https://developers.digitalocean.com/documentation/v2/).## A Basic Example
```rust,no_run
extern crate digitalocean;
use digitalocean::prelude::*;
use std::env;fn main() {
let api_key = env::var("API_KEY")
.expect("API_KEY not set.");
let client = DigitalOcean::new(api_key)
.unwrap();Droplet::list()
.execute(&client);
}
```## Usage Fundamentals
All values (`Domain`, `SshKey`, etc) can be found in the `api` module.
Calling an action will return a `Request<_,_>` type. For example `Droplet::create()` will create a
`Request`. These types may then have specific futher functions to futher build up
the request or transform it into some other request.```rust,no_run
extern crate digitalocean;
use digitalocean::DigitalOcean;
use digitalocean::api::Domain;fn main() {
// Gets details of a specific domain.
let req = Domain::get("foo.com");// Get the records for that domain instead (futher build the request)
let req = req.records();
// Get the records of a domain without having a prior request.
let req = Domain::get("foo.com").records();// Create a new record for a domain
let req = Domain::get("foo.com").records().create("CNAME", "test", "127.0.0.1");
}
```In order to realize any action, `.execute()` must be called with a `DigitalOcean`
client. It is also possible to call `do_client.execute(some_request)`.In order to use the entire API, it is recommended to reference the various `Request` types.
## Design
The crate is founded on a few design considerations:
* Keep things simple and generic.
* Map closely to the DigitalOcean API.
* `Request`s are agnostic over `Client`s.
* It should be difficult to make an invalid API request.
* Use static dispatch as much as possible.
* Only the bare minimum amount of information should be carried around.
* Allow for easy construction of separate clients (`hyper`, etc.)
* No caching (yet). (DigitalOcean does not have [ETags](https://en.wikipedia.org/wiki/HTTP_ETag))## Debugging
This crate uses the [`log`](https://doc.rust-lang.org/log/log/index.html) crate. You can see `digitalocean` logs by passing an environment variable such as:
```bash
RUST_LOG=digitalocean=debug cargo run
```## Development Status
This crate is in a prototype state.
Not all endpoints have been fully end-to-end tested on the production DigitalOcean API. It's very
likely that some endpoints will have parsing errors due to unexpected values returned from the API.**If something does not work please file a bug!**
Feedback, patches, and new features are encouraged.
Please just open an issue or PR!