// use crate::Script;
// use glib::{object::IsA, translate::*, GString};
// use std::fmt;
// glib_wrapper! {
// pub struct Scriptable(Interface<ffi::ClutterScriptable>);
// match fn {
// get_type => || ffi::clutter_scriptable_get_type(),
// }
// }
// pub const NONE_SCRIPTABLE: Option<&Scriptable> = None;
// /// Trait containing all `Scriptable` methods.
// ///
// /// # Implementors
// ///
// /// [`Actor`](struct.Actor.html), [`Alpha`](struct.Alpha.html), [`BehaviourEllipse`](struct.BehaviourEllipse.html), [`BehaviourRotate`](struct.BehaviourRotate.html), [`Behaviour`](struct.Behaviour.html), [`Box`](struct.Box.html), [`Clone`](struct.Clone.html), [`Group`](struct.Group.html), [`Interval`](struct.Interval.html), [`KeyframeTransition`](struct.KeyframeTransition.html), [`PropertyTransition`](struct.PropertyTransition.html), [`Rectangle`](struct.Rectangle.html), [`Scriptable`](struct.Scriptable.html), [`ScrollActor`](struct.ScrollActor.html), [`Stage`](struct.Stage.html), [`State`](struct.State.html), [`Text`](struct.Text.html), [`Texture`](struct.Texture.html), [`Timeline`](struct.Timeline.html), [`TransitionGroup`](struct.TransitionGroup.html), [`Transition`](struct.Transition.html)
// pub trait ScriptableExt: 'static {
// /// Retrieves the id of `self` set using `Scriptable::set_id`.
// ///
// /// # Returns
// ///
// /// the id of the object. The returned string is owned by
// /// the scriptable object and should never be modified of freed
// fn get_id(&self) -> Option<GString>;
// // /// Parses the passed JSON node. The implementation must set the type
// // /// of the passed `gobject::Value` pointer using `gobject::Value::init`.
// // /// ## `script`
// // /// the `Script` creating the scriptable instance
// // /// ## `value`
// // /// the generic value to be set
// // /// ## `name`
// // /// the name of the node
// // /// ## `node`
// // /// the JSON node to be parsed
// // ///
// // /// # Returns
// // ///
// // /// `true` if the node was successfully parsed, `false` otherwise.
// // fn parse_custom_node<P: IsA<Script>>(
// // &self,
// // script: &P,
// // value: &mut glib::Value,
// // name: &str,
// // node: &json::Node,
// // ) -> bool;
// /// Overrides the common properties setting. The underlying virtual
// /// function should be used when implementing custom properties.
// /// ## `script`
// /// the `Script` creating the scriptable instance
// /// ## `name`
// /// the name of the property
// /// ## `value`
// /// the value of the property
// fn set_custom_property<P: IsA<Script>>(&self, script: &P, name: &str, value: &glib::Value);
// /// Sets `id_` as the unique Clutter script it for this instance of
// /// `ScriptableIface`.
// ///
// /// This name can be used by user interface designer applications to
// /// define a unique name for an object constructable using the UI
// /// definition language parsed by `Script`.
// /// ## `id_`
// /// the `Script` id of the object
// fn set_id(&self, id_: &str);
// }
// impl<O: IsA<Scriptable>> ScriptableExt for O {
// // fn get_id(&self) -> Option<GString> {
// // unsafe {
// // from_glib_none(ffi::clutter_scriptable_get_id(
// // self.as_ref().to_glib_none().0,
// // ))
// // }
// // }
// // fn parse_custom_node<P: IsA<Script>>(
// // &self,
// // script: &P,
// // value: &mut glib::Value,
// // name: &str,
// // node: &json::Node,
// // ) -> bool {
// // unsafe {
// // from_glib(ffi::clutter_scriptable_parse_custom_node(
// // self.as_ref().to_glib_none().0,
// // script.as_ref().to_glib_none().0,
// // value.to_glib_none_mut().0,
// // name.to_glib_none().0,
// // node.to_glib_none().0,
// // ))
// // }
// // }
// fn set_custom_property<P: IsA<Script>>(&self, script: &P, name: &str, value: &glib::Value) {
// unsafe {
// ffi::clutter_scriptable_set_custom_property(
// self.as_ref().to_glib_none().0,
// script.as_ref().to_glib_none().0,
// name.to_glib_none().0,
// value.to_glib_none().0,
// );
// }
// }
// fn set_id(&self, id_: &str) {
// unsafe {
// ffi::clutter_scriptable_set_id(self.as_ref().to_glib_none().0, id_.to_glib_none().0);
// }
// }
// }
// impl fmt::Display for Scriptable {
// fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
// write!(f, "Scriptable")
// }
// }