fm_plugin

A Rust wrapper for the FileMaker plug-in SDK

Cargo.toml:

```toml [lib] path = "src/lib.rs" crate-type = ["cdylib"]

[dependencies] fm_plugin = "0.1.0"

[build-dependencies] fm_plugin = "0.1.0"

[package.metadata.cargo-post.dependencies] directories = "" toml = "" serde = { version = "1.0", features = ["derive"] } fm_plugin = "0.1.0" ```

config.toml:

```toml [filemaker] extpath = "path/to/filemaker/Extensions" binpath = "path/to/filemaker/executable.exe"

[plugin] name = "my_plugin" ```

build.rs:

```rust

[cfg(any(targetos = "windows", targetos = "macos"))]

fn main() -> Result<(), Box> { fmplugin::killfilemaker(env!("CARGOMANIFESTDIR"))?; Ok(()) } ```

post_build.rs:

```rust

[cfg(any(targetos = "windows", targetos = "macos"))]

fn main() -> Result<(), Box> { fmplugin::postbuild::bundle_plugin()?; Ok(()) } ```

lib.rs:

```rust use fmplugin::{Plugin, registerplugin, log, FMError, ExternalFunction, FileMakerFunction}; use fm_plugin::PluginFlag::*;

struct MyPlugin;

impl Plugin for MyPlugin { fn id() -> &'static [u8; 4] { &b"MyPl" }

fn name() -> &'static str {
    "MY PLUGIN"
}

fn register_functions() -> Vec<ExternalFunction> {
    vec![ExternalFunction {
        id: 100,
        name: "MyPlugin_MyFunction",
        definition: "MyPlugin_MyFunction( arg1 ; arg2 )",
        description: "Does some really great stuff.",
        min_args: 2,
        max_args: 2,
        compatible_flags: DisplayInAllDialogs | FutureCompatible,
        function_ptr: Some(MyFunction::extern_func),
        }
    ]
}

...

}

pub struct MyFunction;

impl FileMakerFunction for MyFunction { fn function(id: i16, env: &ExprEnv, args: &DataVect, result: &mut Data) -> FMError { //log some info to the desktop (plugin.log) log("some troubleshooting info");

    ...

    FMError::NoError
}

}

register_plugin!(MyPlugin); ```

cargo install cargo-post

If you set up the build/post_build scripts as shown above, running cargo post build --release will:

  1. Quit FileMaker
  2. Compile the library
  3. Bundle the plug-in
  4. Clear the log file
  5. Move the plug-in to the FileMaker extensions folder
  6. Launch FileMaker