An open API service indexing awesome lists of open source software.

https://github.com/rustlanges/pistones

Lib a high performance general purpose code execution engine
https://github.com/rustlanges/pistones

Last synced: 3 months ago
JSON representation

Lib a high performance general purpose code execution engine

Awesome Lists containing this project

README

        

# 🚂 pistones

Unofficial API Client wrapper from [engineer-man/piston](https://github.com/engineer-man/piston?tab=readme-ov-file#Public-API)

### Functionality

The Piston client provides functionalities to:

* **Create a Piston client:** Establish a connection with the Piston execution environment.
* **Configure the client:**
* Set the API version.
* Set the base URL for the Piston API.
* Enable or disable language caching.
* Define a custom `reqwest` client for HTTP requests.
* **Language Management:**
* Fetch a list of supported languages and their versions.
* Get the version for a specific language.
* **Code Execution:**
* Execute Piston code provided as strings or files.
* Specify the language and version for code execution.

### Usage

The library utilizes an asynchronous programming model. Here's a basic example demonstrating how to run a Piston script:

```rust
use piston_client::Client;

#[tokio::main]
fn main() -> Result<(), piston_client::Error>> {
let mut client = Client::new()?;

// Get the Rust language version
let rust_version = client.lang_version("rust").await?;
println!("Rust version: {}", rust_version);

// Define the code to run
let code = r#"
fn main() {
println!("Hello, Piston!");
}
"#;

// Run the code
let response = client.run("rust", code.to_string()).await?;

// Process the response
println!("Response: {:?}", response);

Ok(())
}
```

### Client Configuration

* **API Version:** By default, the client uses the default API version. You can change this using the `api_version` method.
* **Base URL:** The base URL for the Piston API defaults to `https://emkc.org`. You can override this with the `base_url` method.
* **Language Caching:** Language information is fetched from the Piston API by default and cached for subsequent use. You can disable caching with the `disable_cache` method.
* **Custom Client:** The library utilizes `reqwest` for making HTTP requests. You can provide your own `reqwest::Client` instance using the `custom_client` method.

### Client Methods

* **new:** Creates a new Piston client instance.
* **api_version:** Sets the API version to be used by the client.
* **base_url:** Sets the base URL for the Piston API.
* **disable_cache:** Disables language information caching.
* **user_agent:** Sets a custom user agent for HTTP requests.
* **custom_client:** Sets a custom `reqwest` client for HTTP requests.
* **refresh_cache:** Updates the cached language information.
* **get_languages:** Retrieves a list of supported languages and their versions.
* **lang_version:** Gets the version for a specific language.
* **exec:** Executes Piston code provided as files.
* **run_files:** Executes Piston code provided through an iterator of `FileData` structs.
* **run_with_version:** Executes Piston code with a specified language version and content string.
* **run:** Executes Piston code with a retrieved language version and content string.

### Data Structures

* **Language:** Represents a supported language with its name, aliases, and version.
* **FileData:** Represents a file to be included in the code execution. It has optional `name` and required `content` fields.
* **Error:** Represents errors that can occur during library usage.
* **ApiResponse:** Represents the response received from the Piston API after code execution. It can be either a successful execution result or an error message.

### Contributing

Feel free to contribute to this library by opening pull requests on the relevant Github repository. Make sure to follow the project's contribution guidelines.