pub mod apply;
pub mod draft;
pub mod host;
#[cfg(not(target_arch = "wasm32"))]
pub mod native;
pub mod tree;
pub mod types;
pub use anyhow;
pub use draft::Draft;
use serde::de::DeserializeOwned;
pub use tree::{
before_and_after_ids, docstring_of, has_tag, is_fold, line_count, one_sided, path_to,
siblings_of, sides_with_other_ids, walk, walk_mut, Node, OtherSide, Pairing, Region, Source,
};
pub use types::{
Annotation, FileEntry, FileRef, FileSides, FileStatus, Move, Position, QuerySource, Range,
Side, Span, Visibility, ROOT,
};
pub trait Plugin: Sized {
type Options: DeserializeOwned;
fn new(options: Self::Options) -> anyhow::Result<Self>;
fn queries(&self) -> anyhow::Result<Vec<QuerySource>> {
Ok(Vec::new())
}
fn classify(&self, file: &FileEntry) -> anyhow::Result<Vec<String>>;
fn mutate(&self, file: &FileEntry, sides: &Pairing<Source>) -> anyhow::Result<Vec<Move>>;
fn enrich(
&self,
_file: &FileEntry,
_sides: &Pairing<Source>,
) -> anyhow::Result<Vec<Annotation>> {
Ok(Vec::new())
}
}
#[doc(hidden)]
pub mod bindings {
wit_bindgen::generate!({
path: "wit",
world: "plugin",
pub_export_macro: true,
default_bindings_module: "diffr_plugin_sdk::bindings",
additional_derives: [PartialEq, Eq],
});
}
#[cfg(target_arch = "wasm32")]
#[doc(hidden)]
pub mod guest;
#[macro_export]
macro_rules! export {
($name:literal, $plugin:ty) => {
#[cfg(not(target_arch = "wasm32"))]
#[doc(hidden)]
pub static DIFFR_PLUGIN: $crate::native::Registration = $crate::native::Registration {
name: $name,
create: $crate::native::create::<$plugin>,
};
#[cfg(target_arch = "wasm32")]
const _: () = {
struct DiffrPluginExport;
impl $crate::bindings::exports::diffr::plugin::guest::Guest for DiffrPluginExport {
type Plugin = $crate::guest::Instance<$plugin>;
}
$crate::bindings::export!(DiffrPluginExport with_types_in $crate::bindings);
};
};
}