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
- Host: GitHub
- URL: https://github.com/rustlanges/pistones
- Owner: RustLangES
- License: mit
- Created: 2024-08-05T02:49:48.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2024-08-28T02:56:20.000Z (10 months ago)
- Last Synced: 2025-04-11T13:36:50.381Z (3 months ago)
- Language: Rust
- Homepage: https://crates.io/crates/pistones
- Size: 63.5 KB
- Stars: 6
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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.