use pine_builtin_macro::BuiltinFunction;
use pine_core::{Color, FillObject, FillOutput, PineOutput};
use pine_interpreter::{Interpreter, RuntimeError, Value};
#[derive(BuiltinFunction)]
#[builtin(name = "fill", output = FillOutput)]
struct Fill {
#[arg(default = None)]
id1: Option<f64>,
#[arg(default = None)]
id2: Option<f64>,
#[arg(default = None)]
color: Option<Color>,
#[arg(default = "")]
title: String,
#[arg(default = None)]
transp: Option<f64>,
}
impl Fill {
fn execute<O: PineOutput + FillOutput>(
&self,
ctx: &mut Interpreter<O>,
) -> Result<Value<O>, RuntimeError> {
let _ = self.transp;
ctx.output.add_fill(FillObject {
id1: self.id1.map(|x| x as usize),
id2: self.id2.map(|x| x as usize),
color: self.color.clone(),
title: self.title.clone(),
});
Ok(Value::Na)
}
}
pub fn register<O: PineOutput + FillOutput>() -> Value<O> {
Fill::builtin_value::<O>()
}