record_conv: change construct prototype
[yaz-moved-to-github.git] / include / yaz / record_conv.h
index 919f76d..a9bdebe 100644 (file)
@@ -1,5 +1,5 @@
-/*
- * Copyright (c) 1995-2007, Index Data
+/* This file is part of the YAZ toolkit.
+ * Copyright (C) 1995-2012 Index Data.
  * All rights reserved.
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -24,7 +24,6 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-/* $Id: record_conv.h,v 1.8 2007-01-03 08:42:14 adam Exp $ */
 
 /**
  * \file record_conv.h
@@ -38,6 +37,7 @@
 #include <yaz/wrbuf.h>
 #include <yaz/yconfig.h>
 #include <yaz/xmltypes.h>
+#include <yaz/z-opac.h>
 
 YAZ_BEGIN_CDECL
 
@@ -54,6 +54,23 @@ YAZ_EXPORT yaz_record_conv_t yaz_record_conv_create(void);
 */
 YAZ_EXPORT void yaz_record_conv_destroy(yaz_record_conv_t p);
 
+#if YAZ_HAVE_XML2
+/** record conversion type */
+struct yaz_record_conv_type {
+    /** \brief pointer to next type ; NULL for last */
+    struct yaz_record_conv_type *next;
+
+    /** \brief construct and configure a type of ours */
+    void * (*construct)(const xmlNode *, const char *path,
+                        WRBUF error_msg);
+
+    /** \brief converts a record */
+    int  (*convert)(void *info, WRBUF record, WRBUF error_msg);
+
+    /** \brief destroys our conversion handler */
+    void (*destroy)(void *info);
+};
+
 /** configures record conversion
     \param p record conversion handle
     \param node xmlNode pointer (root element of XML config)
@@ -80,7 +97,21 @@ YAZ_EXPORT void yaz_record_conv_destroy(yaz_record_conv_t p);
 YAZ_EXPORT
 int yaz_record_conv_configure(yaz_record_conv_t p, const xmlNode *node);
 
-/** performs record conversion
+/** configures record conversion with user-defined conversion types
+    \param p record conversion handle
+    \param node xmlNode pointer (root element of XML config)
+    \param types conversion types
+    \retval 0 success
+    \retval -1 failure
+
+*/
+YAZ_EXPORT
+int yaz_record_conv_configure_t(yaz_record_conv_t p, const xmlNode *node,
+                                struct yaz_record_conv_type *types);
+
+#endif
+
+/** performs record conversion on record buffer (OCTET aligned)
     \param p record conversion handle
     \param input_record_buf input record buffer
     \param input_record_len length of input record buffer
@@ -95,6 +126,21 @@ int yaz_record_conv_record(yaz_record_conv_t p, const char *input_record_buf,
                            size_t input_record_len,
                            WRBUF output_record);
 
+
+/** performs record conversion on OPAC record
+    \param p record conversion handle
+    \param input_record Z39.50 OPAC record
+    \param output_record resultint record (WRBUF string)
+    \retval 0 success
+    \retval -1 failure
+
+    On failure, use yaz_record_conv_get_error to get error string.
+*/
+YAZ_EXPORT
+int yaz_record_conv_opac_record(yaz_record_conv_t p,
+                                Z_OPACRecord *input_record,
+                                WRBUF output_record);
+
 /** returns error string (for last error)
     \param p record conversion handle
     \return error string
@@ -110,12 +156,18 @@ const char *yaz_record_conv_get_error(yaz_record_conv_t p);
 YAZ_EXPORT
 void yaz_record_conv_set_path(yaz_record_conv_t p, const char *path);
 
+/** adds a type to our conversion handler
+    \param p record conversion handle
+    \param type info
+*/    
+
 YAZ_END_CDECL
 
 #endif
 /*
  * Local variables:
  * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
  * indent-tabs-mode: nil
  * End:
  * vim: shiftwidth=4 tabstop=8 expandtab