#define G_DEFINE_HEADER(MODULE, OBJ_NAME, module_obj_name, ModuleObjName) \
  typedef struct _##ModuleObjName ModuleObjName;                           \
  typedef struct _##ModuleObjName##Class ModuleObjName##Class;              \
  GType module_obj_name##_get_type (void);                                   \
                                                                             \
  static inline ModuleObjName *                                              \
  MODULE##_##OBJ_NAME (gpointer ptr)                                         \
  {                                                                          \
    return G_TYPE_CHECK_INSTANCE_CAST (ptr,                                  \
                                       module_obj_name##_get_type (),        \
                                       ModuleObjName);                       \
  }                                                                          \
                                                                             \
  static inline ModuleObjName##Class *                                       \
  MODULE##_##OBJ_NAME##_CLASS (gpointer ptr)                                 \
  {                                                                          \
    return G_TYPE_CHECK_CLASS_CAST (ptr,                                     \
                                    module_obj_name##_get_type (),           \
                                    ModuleObjName##Class);                   \
  }                                                                          \
                                                                             \
  static inline gboolean                                                     \
  MODULE##_IS_##OBJ_NAME (gpointer ptr)                                      \
  {                                                                          \
    return G_TYPE_CHECK_INSTANCE_TYPE (ptr,                                  \
                                       module_obj_name##_get_type ());       \
  }                                                                          \
                                                                             \
  static inline gboolean                                                     \
  MODULE##_IS_##OBJ_NAME##_CLASS (gpointer ptr)                              \
  {                                                                          \
    return G_TYPE_CHECK_CLASS_TYPE (ptr,                                     \
                                    module_obj_name##_get_type ());          \
  }                                                                          \
                                                                             \
  static inline ModuleObjName##Class *                                       \
  MODULE##_##OBJ_NAME##_GET_CLASS (gpointer ptr)                             \
  {                                                                          \
    return G_TYPE_INSTANCE_GET_CLASS (ptr,                                   \
                                      module_obj_name##_get_type (),         \
                                      ModuleObjName##Class);                 \
  }
