/********************************** INTERFACE *********************************/
 #x:include-guard

 #x:open-namespace
struct #x:model-name
{
  dzn::port::meta meta;
  #x:enum-definer
  struct
  {
    #x:in-event-definer
    } in;

  struct
  {
    #x:out-event-definer
    } out;

   inline #x:model-name(const dzn::port::meta& m) : meta(m) {}
   inline virtual ~#x:model-name() = default;

   void check_bindings() const
   {
     #x:check-in-binding
     #x:check-out-binding
   }
};

inline void connect (#x:model-name & provided, #x:model-name & required)
{
  provided.out = required.out;
  required.in = provided.in;
  provided.meta.require = required.meta.require;
  required.meta.provide = provided.meta.provide;
}
 #x:close-namespace

 #x:interface-enum-to-string
 #x:interface-string-to-enum

#x:endif
/********************************** INTERFACE *********************************/
