Adobe Extended Script ExternalObject (aes_externalobj)
A Rust implementation of Adobe ExtendScript external object interface, allowing creation of native extensions for Adobe applications.
Motivation
ExtendScript is based on JavaScript ES3, which is quite outdated. The old interface has a C/C++ based external object, which allowed you to create your own extensions. The goal of this project is to provide a Rust implementation of the ExtendScript external object interface, but with a more modern and safe Rust wrapper around the C ABI. The project currently has a basic implementation and is in development.
Installation
Add this to your Cargo.toml:
[]
= "0.0.1"
Usage
To create an ExtendScript external object, you need to:
- Define your function signatures
- Implement the required functions
- Export them with proper C ABI compatibility
Here's a simple example that provides a function to return a greeting from Rust:
use ;
use ;
// Define your function signatures
// Format: "FunctionName_types" where types are:
// s - string, i - integer, n - number, b - boolean, o - object
static SIGNATURES: &str = "HelloFromRust_s";
pub extern "C"
pub extern "C"
pub extern "C"
// Example function that returns a greeting string
pub extern "C"
Then in ExtendScript you can use it like this:
// Load the external object
var ext = ;
// Call the function - it will return "Hello from Rust!"
var message = ext.;
; // Shows "Hello from Rust!"
// Clean up
ext.;
Building
Prerequisites
- Rust 1.56 or higher
Build Commands
Documentation
For detailed documentation, visit docs.rs/aes_externalobj
Roadmap
- Basic implementation
- Extend SoServerInterface
- LiveObjects
- Add JavaScript objects
- Documentation
- Error handling
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under dual MIT/Apache-2.0 license. See LICENSE-MIT and LICENSE-APACHE for details.
Acknowledgments
- Adobe Systems for ExtendScript technology
- The Rust community for excellent tools and support