Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/panghu-huang/octocrate
A comprehensive GitHub REST API library based on Rust.
https://github.com/panghu-huang/octocrate
github github-api github-app octocat octocrate rest-api
Last synced: 3 months ago
JSON representation
A comprehensive GitHub REST API library based on Rust.
- Host: GitHub
- URL: https://github.com/panghu-huang/octocrate
- Owner: panghu-huang
- Created: 2022-12-30T23:59:05.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-04-29T11:22:58.000Z (8 months ago)
- Last Synced: 2024-05-02T06:16:55.794Z (8 months ago)
- Topics: github, github-api, github-app, octocat, octocrate, rest-api
- Language: Rust
- Homepage:
- Size: 4.02 MB
- Stars: 3
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Octocrate
octocrate is a comprehensive GitHub REST API library based on Rust.
![octocrate](https://img.shields.io/crates/v/octocrate.svg)
![MIT](https://img.shields.io/badge/license-MIT-blue.svg)[English](./README.md) | [简体中文](./README_zh-CN.md)
## Features
- Fully compliant with the official documentation at [GitHub REST API Documentation](https://docs.github.com/en/rest?apiVersion=2022-11-28)
- Complete type restrictions for Body / Query parameters
- Utilizes feature flags for individual API dependencies
- Supports GitHub app requests for installation API
- Supports installation access tokens and personal access tokens
- Defines all Webhooks event types## Dependencies
```toml
[dependencies]
octocrate = "*"
```Use features to selectively import the required APIs:
```toml
octocrate = { version = "*", features = ["repos", "git", "pulls", "issues", "users", "search"] }
```Or use the `full` feature to import all APIs and Webhooks (note: this will increase compilation time):
```toml
octocrate = { version = "*", features = ["full"] }
```### Type Dependencies
You can also import only types without using the corresponding APIs:
```toml
octocrate-types = "*"
```Use features to selectively import the required types:
```toml
octocrate-types = { version = "*", features = ["repos", "git", "pulls", "issues", "users", "search"] }
```Import Webhooks types:
```toml
octocrate-webhooks = { version = "*", features = ["pull_request", "push"] }
```You can check [octocrate-types documentation](https://docs.rs/crate/octocrate-types/latest/features) and [octocrate-webhooks documentation](https://docs.rs/crate/octocrate-webhooks/latest/features) for all supported features and types.
## Example
Create a default GitHub API configuration and use it to get a repository's Pull Request:
```rust
use octocrate::{APIConfig, Error, GitHubAPI};#[tokio::main]
async fn main() {
// Create a default GitHub API configuration
let config = APIConfig::default().shared();let api = GitHubAPI::new(&config);
let pull_request = api
.pulls
.get("panghu-huang", "octocrate", 1)
.send()
.await
.unwrap();// ..
}
```#### Directly import the corresponding API
```rust
// Import the repos API instead of GitHubAPI
use octocrate::{repos::GitHubReposAPI, APIConfig, GitHubAPI, PersonalAccessToken};#[tokio::main]
async fn main() {
// Create a personal access token
let personal_access_token = PersonalAccessToken::new("YOUR_PERSONAL_ACCESS_TOKEN");// Use the personal access token to create a API configuration
let config = APIConfig::with_token(personal_access_token).shared();let repos_api = GitHubReposAPI::new(&config);
let commit = repos_api
.get_commit(
"panghu-huang",
"octocrate",
"18ff8ed1a3437649e7d87bec9a7d4fe5562f6ad3",
)
.send()
.await
.unwrap();
}
```#### Using GitHub App
```rust
use octocrate::{APIConfig, AppAuthorization, GitHubAPI};#[tokio::main]
async fn main() {
let app_id = "YOUR_APP_ID";
let private_key = "YOUR_PRIVATE_KEY";// Create a GitHub App authorization
let app_authorization = AppAuthorization::new(app_id, private_key);// Use the GitHub App authorization to create an API configuration
let config = APIConfig::with_token(app_authorization).shared();let api = GitHubAPI::new(&config);
// Get the Installation for a repository
let installation = api
.apps
.get_repo_installation("panghu-huang", "octocrate")
.send()
.await
.unwrap();// Get the Installation Access Token for this Installation
let installation_token = api
.apps
.create_installation_access_token(installation.id)
.send()
.await
.unwrap();// Use the Installation Access Token to create a new API configuration
let config = APIConfig::with_token(installation_token).shared();let api = GitHubAPI::new(&config);
let repository = api
.repos
.get("panghu-huang", "octocrate")
.send()
.await
.unwrap();// ..
}
```#### Request Body Parameters
```rust
use octocrate::{
issues, APIConfig, AuthorAssociation, GitHubAPI, PersonalAccessToken,
};#[tokio::main]
async fn main() {
let personal_access_token = PersonalAccessToken::new("YOUR_PERSONAL_ACCESS_TOKEN");let config = APIConfig::with_token(personal_access_token).shared();
let api = GitHubAPI::new(&config);
// Create a comment request
// https://github.com/panghu-huang/octocrate/pull/1#issuecomment-2041280635
let comment = issues::create_comment::Request {
body: "Hello, world! (Created by octocrate)".to_string(),
};// Create a comment on the issue
let issue_comment = api
.issues
.create_comment("panghu-huang", "octocrate", 1)
.body(&comment)
.send()
.await
.unwrap();
}
```#### Request Query Parameters
```rust
use octocrate::{
pulls, APIConfig, Error, GitHubAPI, PersonalAccessToken,
};#[tokio::main]
async fn main() {
let personal_access_token = PersonalAccessToken::new("YOUR_PERSONAL_ACCESS_TOKEN");let config = APIConfig::with_token(personal_access_token).shared();
let api = GitHubAPI::new(&config);
// Use builder pattern to construct query parameters
let query = pulls::list::Query::builder()
.state(pulls::list::QueryState::Open)
.per_page(10)
.build()let pull_requests = api
.pulls
.list("facebook", "react")
.query(&query)
.send()
.await
.unwrap();// ..
}
```You can find more example code in the [octocrate/examples](./octocrate/examples) directory.
## Contributing
Contributions are welcome! Feel free to open issues or submit pull requests to improve the project.
## License
This project is licensed under the MIT License.