#ifndef __GSK_XML_CONTEXT_H_
#define __GSK_XML_CONTEXT_H_
typedef struct _GskXmlContext GskXmlContext;
/* parse an XML node into a typed GValue */
typedef gboolean (*GskXmlContextParserFunc)(GskXmlContext *context,
GskXmlNode *node,
GValue *value_out,
gpointer data,
GError **error);
/* convert a GValue into an XML node */
typedef GskXmlNode *(*GskXmlContextToXmlFunc)(GskXmlContext *context,
const GValue *value,
gpointer data,
GError **error);
/* ensure that an object is in a valid state */
typedef gboolean (*GskXmlValidateFunc) (GskXmlContext *context,
GObject *object,
gpointer data,
GError **error);
/* handle a miscellaneous xml node for this object */
typedef gboolean (*GskXmlObjectHandler) (GskXmlContext *context,
GObject *object,
GskXmlNode *node,
gpointer data,
GError **error);
/* produce miscellaneous xml nodes for this object */
typedef gboolean (*GskXmlObjectWriter) (GskXmlContext *context,
GObject *object,
GskXmlBuilder *builder,
gpointer data,
GError **error);
/* --- public api --- */
GskXmlNode *gsk_xml_context_serialize_object (GskXmlContext *context,
gpointer object,
GError **error);
GskXmlNode *gsk_xml_context_serialize_value (GskXmlContext *context,
GValue *value,
GError **error);
gboolean gsk_xml_context_deserialize_value (GskXmlContext *context,
GskXmlNode *node,
GValue *out,
GError **error);
gpointer gsk_xml_context_deserialize_object(GskXmlContext *context,
GType base_type,
GskXmlNode *node,
GError **error);
/* constructing contexts and assigning nicknames */
GskXmlContext *gsk_xml_context_new (void);
GskXmlContext *gsk_xml_context_global (void);
void gsk_xml_context_register_nickname (GskXmlContext *context,
GType base_type,
const char *nickname,
GType type);
/* protected: for type implementations only */
void gsk_xml_context_register_parser (GskXmlContext *context,
GType type,
GskXmlContextParserFunc func,
GskXmlContextToXmlFunc to_xml,
gpointer data,
GDestroyNotify destroy);
/* protected: for object implementations only */
void gsk_xml_context_register_validator(GskXmlContext *context,
GType object_type,
GskXmlValidateFunc func,
gpointer data,
GDestroyNotify destroy);
void gsk_xml_context_add_misc_parser (GskXmlContext *context,
GType object_type,
GskXmlString *node_name, /* may be NULL */
GskXmlObjectHandler handler,
gpointer data,
GDestroyNotify destroy);
void gsk_xml_context_add_misc_writer (GskXmlContext *context,
GType object_type,
GskXmlObjectWriter handler,
gpointer data,
GDestroyNotify destroy);
#endif
syntax highlighted by Code2HTML, v. 0.9.1