Add automatically generated C/C++ wrapper bindings
[rust-lightning] / lightning-c-bindings / include / lightningpp.hpp
diff --git a/lightning-c-bindings/include/lightningpp.hpp b/lightning-c-bindings/include/lightningpp.hpp
new file mode 100644 (file)
index 0000000..d494cd4
--- /dev/null
@@ -0,0 +1,1987 @@
+#include <string.h>
+namespace LDK {
+class Event {
+private:
+       LDKEvent self;
+public:
+       Event(const Event&) = delete;
+       ~Event() { Event_free(self); }
+       Event(Event&& o) : self(o.self) { memset(&o, 0, sizeof(Event)); }
+       Event(LDKEvent&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKEvent)); }
+       operator LDKEvent() { LDKEvent res = self; memset(&self, 0, sizeof(LDKEvent)); return res; }
+       LDKEvent* operator &() { return &self; }
+       LDKEvent* operator ->() { return &self; }
+       const LDKEvent* operator &() const { return &self; }
+       const LDKEvent* operator ->() const { return &self; }
+};
+class MessageSendEvent {
+private:
+       LDKMessageSendEvent self;
+public:
+       MessageSendEvent(const MessageSendEvent&) = delete;
+       ~MessageSendEvent() { MessageSendEvent_free(self); }
+       MessageSendEvent(MessageSendEvent&& o) : self(o.self) { memset(&o, 0, sizeof(MessageSendEvent)); }
+       MessageSendEvent(LDKMessageSendEvent&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKMessageSendEvent)); }
+       operator LDKMessageSendEvent() { LDKMessageSendEvent res = self; memset(&self, 0, sizeof(LDKMessageSendEvent)); return res; }
+       LDKMessageSendEvent* operator &() { return &self; }
+       LDKMessageSendEvent* operator ->() { return &self; }
+       const LDKMessageSendEvent* operator &() const { return &self; }
+       const LDKMessageSendEvent* operator ->() const { return &self; }
+};
+class MessageSendEventsProvider {
+private:
+       LDKMessageSendEventsProvider self;
+public:
+       MessageSendEventsProvider(const MessageSendEventsProvider&) = delete;
+       ~MessageSendEventsProvider() { MessageSendEventsProvider_free(self); }
+       MessageSendEventsProvider(MessageSendEventsProvider&& o) : self(o.self) { memset(&o, 0, sizeof(MessageSendEventsProvider)); }
+       MessageSendEventsProvider(LDKMessageSendEventsProvider&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKMessageSendEventsProvider)); }
+       operator LDKMessageSendEventsProvider() { LDKMessageSendEventsProvider res = self; memset(&self, 0, sizeof(LDKMessageSendEventsProvider)); return res; }
+       LDKMessageSendEventsProvider* operator &() { return &self; }
+       LDKMessageSendEventsProvider* operator ->() { return &self; }
+       const LDKMessageSendEventsProvider* operator &() const { return &self; }
+       const LDKMessageSendEventsProvider* operator ->() const { return &self; }
+};
+class EventsProvider {
+private:
+       LDKEventsProvider self;
+public:
+       EventsProvider(const EventsProvider&) = delete;
+       ~EventsProvider() { EventsProvider_free(self); }
+       EventsProvider(EventsProvider&& o) : self(o.self) { memset(&o, 0, sizeof(EventsProvider)); }
+       EventsProvider(LDKEventsProvider&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKEventsProvider)); }
+       operator LDKEventsProvider() { LDKEventsProvider res = self; memset(&self, 0, sizeof(LDKEventsProvider)); return res; }
+       LDKEventsProvider* operator &() { return &self; }
+       LDKEventsProvider* operator ->() { return &self; }
+       const LDKEventsProvider* operator &() const { return &self; }
+       const LDKEventsProvider* operator ->() const { return &self; }
+};
+class APIError {
+private:
+       LDKAPIError self;
+public:
+       APIError(const APIError&) = delete;
+       ~APIError() { APIError_free(self); }
+       APIError(APIError&& o) : self(o.self) { memset(&o, 0, sizeof(APIError)); }
+       APIError(LDKAPIError&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKAPIError)); }
+       operator LDKAPIError() { LDKAPIError res = self; memset(&self, 0, sizeof(LDKAPIError)); return res; }
+       LDKAPIError* operator &() { return &self; }
+       LDKAPIError* operator ->() { return &self; }
+       const LDKAPIError* operator &() const { return &self; }
+       const LDKAPIError* operator ->() const { return &self; }
+};
+class Level {
+private:
+       LDKLevel self;
+public:
+       Level(const Level&) = delete;
+       Level(Level&& o) : self(o.self) { memset(&o, 0, sizeof(Level)); }
+       Level(LDKLevel&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKLevel)); }
+       operator LDKLevel() { LDKLevel res = self; memset(&self, 0, sizeof(LDKLevel)); return res; }
+       LDKLevel* operator &() { return &self; }
+       LDKLevel* operator ->() { return &self; }
+       const LDKLevel* operator &() const { return &self; }
+       const LDKLevel* operator ->() const { return &self; }
+};
+class Logger {
+private:
+       LDKLogger self;
+public:
+       Logger(const Logger&) = delete;
+       ~Logger() { Logger_free(self); }
+       Logger(Logger&& o) : self(o.self) { memset(&o, 0, sizeof(Logger)); }
+       Logger(LDKLogger&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKLogger)); }
+       operator LDKLogger() { LDKLogger res = self; memset(&self, 0, sizeof(LDKLogger)); return res; }
+       LDKLogger* operator &() { return &self; }
+       LDKLogger* operator ->() { return &self; }
+       const LDKLogger* operator &() const { return &self; }
+       const LDKLogger* operator ->() const { return &self; }
+};
+class ChannelHandshakeConfig {
+private:
+       LDKChannelHandshakeConfig self;
+public:
+       ChannelHandshakeConfig(const ChannelHandshakeConfig&) = delete;
+       ~ChannelHandshakeConfig() { ChannelHandshakeConfig_free(self); }
+       ChannelHandshakeConfig(ChannelHandshakeConfig&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelHandshakeConfig)); }
+       ChannelHandshakeConfig(LDKChannelHandshakeConfig&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelHandshakeConfig)); }
+       operator LDKChannelHandshakeConfig() { LDKChannelHandshakeConfig res = self; memset(&self, 0, sizeof(LDKChannelHandshakeConfig)); return res; }
+       LDKChannelHandshakeConfig* operator &() { return &self; }
+       LDKChannelHandshakeConfig* operator ->() { return &self; }
+       const LDKChannelHandshakeConfig* operator &() const { return &self; }
+       const LDKChannelHandshakeConfig* operator ->() const { return &self; }
+};
+class ChannelHandshakeLimits {
+private:
+       LDKChannelHandshakeLimits self;
+public:
+       ChannelHandshakeLimits(const ChannelHandshakeLimits&) = delete;
+       ~ChannelHandshakeLimits() { ChannelHandshakeLimits_free(self); }
+       ChannelHandshakeLimits(ChannelHandshakeLimits&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelHandshakeLimits)); }
+       ChannelHandshakeLimits(LDKChannelHandshakeLimits&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelHandshakeLimits)); }
+       operator LDKChannelHandshakeLimits() { LDKChannelHandshakeLimits res = self; memset(&self, 0, sizeof(LDKChannelHandshakeLimits)); return res; }
+       LDKChannelHandshakeLimits* operator &() { return &self; }
+       LDKChannelHandshakeLimits* operator ->() { return &self; }
+       const LDKChannelHandshakeLimits* operator &() const { return &self; }
+       const LDKChannelHandshakeLimits* operator ->() const { return &self; }
+};
+class ChannelConfig {
+private:
+       LDKChannelConfig self;
+public:
+       ChannelConfig(const ChannelConfig&) = delete;
+       ~ChannelConfig() { ChannelConfig_free(self); }
+       ChannelConfig(ChannelConfig&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelConfig)); }
+       ChannelConfig(LDKChannelConfig&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelConfig)); }
+       operator LDKChannelConfig() { LDKChannelConfig res = self; memset(&self, 0, sizeof(LDKChannelConfig)); return res; }
+       LDKChannelConfig* operator &() { return &self; }
+       LDKChannelConfig* operator ->() { return &self; }
+       const LDKChannelConfig* operator &() const { return &self; }
+       const LDKChannelConfig* operator ->() const { return &self; }
+};
+class UserConfig {
+private:
+       LDKUserConfig self;
+public:
+       UserConfig(const UserConfig&) = delete;
+       ~UserConfig() { UserConfig_free(self); }
+       UserConfig(UserConfig&& o) : self(o.self) { memset(&o, 0, sizeof(UserConfig)); }
+       UserConfig(LDKUserConfig&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKUserConfig)); }
+       operator LDKUserConfig() { LDKUserConfig res = self; memset(&self, 0, sizeof(LDKUserConfig)); return res; }
+       LDKUserConfig* operator &() { return &self; }
+       LDKUserConfig* operator ->() { return &self; }
+       const LDKUserConfig* operator &() const { return &self; }
+       const LDKUserConfig* operator ->() const { return &self; }
+};
+class ChainError {
+private:
+       LDKChainError self;
+public:
+       ChainError(const ChainError&) = delete;
+       ChainError(ChainError&& o) : self(o.self) { memset(&o, 0, sizeof(ChainError)); }
+       ChainError(LDKChainError&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChainError)); }
+       operator LDKChainError() { LDKChainError res = self; memset(&self, 0, sizeof(LDKChainError)); return res; }
+       LDKChainError* operator &() { return &self; }
+       LDKChainError* operator ->() { return &self; }
+       const LDKChainError* operator &() const { return &self; }
+       const LDKChainError* operator ->() const { return &self; }
+};
+class ChainWatchInterface {
+private:
+       LDKChainWatchInterface self;
+public:
+       ChainWatchInterface(const ChainWatchInterface&) = delete;
+       ~ChainWatchInterface() { ChainWatchInterface_free(self); }
+       ChainWatchInterface(ChainWatchInterface&& o) : self(o.self) { memset(&o, 0, sizeof(ChainWatchInterface)); }
+       ChainWatchInterface(LDKChainWatchInterface&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChainWatchInterface)); }
+       operator LDKChainWatchInterface() { LDKChainWatchInterface res = self; memset(&self, 0, sizeof(LDKChainWatchInterface)); return res; }
+       LDKChainWatchInterface* operator &() { return &self; }
+       LDKChainWatchInterface* operator ->() { return &self; }
+       const LDKChainWatchInterface* operator &() const { return &self; }
+       const LDKChainWatchInterface* operator ->() const { return &self; }
+};
+class BroadcasterInterface {
+private:
+       LDKBroadcasterInterface self;
+public:
+       BroadcasterInterface(const BroadcasterInterface&) = delete;
+       ~BroadcasterInterface() { BroadcasterInterface_free(self); }
+       BroadcasterInterface(BroadcasterInterface&& o) : self(o.self) { memset(&o, 0, sizeof(BroadcasterInterface)); }
+       BroadcasterInterface(LDKBroadcasterInterface&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKBroadcasterInterface)); }
+       operator LDKBroadcasterInterface() { LDKBroadcasterInterface res = self; memset(&self, 0, sizeof(LDKBroadcasterInterface)); return res; }
+       LDKBroadcasterInterface* operator &() { return &self; }
+       LDKBroadcasterInterface* operator ->() { return &self; }
+       const LDKBroadcasterInterface* operator &() const { return &self; }
+       const LDKBroadcasterInterface* operator ->() const { return &self; }
+};
+class ChainListener {
+private:
+       LDKChainListener self;
+public:
+       ChainListener(const ChainListener&) = delete;
+       ~ChainListener() { ChainListener_free(self); }
+       ChainListener(ChainListener&& o) : self(o.self) { memset(&o, 0, sizeof(ChainListener)); }
+       ChainListener(LDKChainListener&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChainListener)); }
+       operator LDKChainListener() { LDKChainListener res = self; memset(&self, 0, sizeof(LDKChainListener)); return res; }
+       LDKChainListener* operator &() { return &self; }
+       LDKChainListener* operator ->() { return &self; }
+       const LDKChainListener* operator &() const { return &self; }
+       const LDKChainListener* operator ->() const { return &self; }
+};
+class ConfirmationTarget {
+private:
+       LDKConfirmationTarget self;
+public:
+       ConfirmationTarget(const ConfirmationTarget&) = delete;
+       ConfirmationTarget(ConfirmationTarget&& o) : self(o.self) { memset(&o, 0, sizeof(ConfirmationTarget)); }
+       ConfirmationTarget(LDKConfirmationTarget&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKConfirmationTarget)); }
+       operator LDKConfirmationTarget() { LDKConfirmationTarget res = self; memset(&self, 0, sizeof(LDKConfirmationTarget)); return res; }
+       LDKConfirmationTarget* operator &() { return &self; }
+       LDKConfirmationTarget* operator ->() { return &self; }
+       const LDKConfirmationTarget* operator &() const { return &self; }
+       const LDKConfirmationTarget* operator ->() const { return &self; }
+};
+class FeeEstimator {
+private:
+       LDKFeeEstimator self;
+public:
+       FeeEstimator(const FeeEstimator&) = delete;
+       ~FeeEstimator() { FeeEstimator_free(self); }
+       FeeEstimator(FeeEstimator&& o) : self(o.self) { memset(&o, 0, sizeof(FeeEstimator)); }
+       FeeEstimator(LDKFeeEstimator&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKFeeEstimator)); }
+       operator LDKFeeEstimator() { LDKFeeEstimator res = self; memset(&self, 0, sizeof(LDKFeeEstimator)); return res; }
+       LDKFeeEstimator* operator &() { return &self; }
+       LDKFeeEstimator* operator ->() { return &self; }
+       const LDKFeeEstimator* operator &() const { return &self; }
+       const LDKFeeEstimator* operator ->() const { return &self; }
+};
+class ChainWatchedUtil {
+private:
+       LDKChainWatchedUtil self;
+public:
+       ChainWatchedUtil(const ChainWatchedUtil&) = delete;
+       ~ChainWatchedUtil() { ChainWatchedUtil_free(self); }
+       ChainWatchedUtil(ChainWatchedUtil&& o) : self(o.self) { memset(&o, 0, sizeof(ChainWatchedUtil)); }
+       ChainWatchedUtil(LDKChainWatchedUtil&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChainWatchedUtil)); }
+       operator LDKChainWatchedUtil() { LDKChainWatchedUtil res = self; memset(&self, 0, sizeof(LDKChainWatchedUtil)); return res; }
+       LDKChainWatchedUtil* operator &() { return &self; }
+       LDKChainWatchedUtil* operator ->() { return &self; }
+       const LDKChainWatchedUtil* operator &() const { return &self; }
+       const LDKChainWatchedUtil* operator ->() const { return &self; }
+};
+class BlockNotifier {
+private:
+       LDKBlockNotifier self;
+public:
+       BlockNotifier(const BlockNotifier&) = delete;
+       ~BlockNotifier() { BlockNotifier_free(self); }
+       BlockNotifier(BlockNotifier&& o) : self(o.self) { memset(&o, 0, sizeof(BlockNotifier)); }
+       BlockNotifier(LDKBlockNotifier&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKBlockNotifier)); }
+       operator LDKBlockNotifier() { LDKBlockNotifier res = self; memset(&self, 0, sizeof(LDKBlockNotifier)); return res; }
+       LDKBlockNotifier* operator &() { return &self; }
+       LDKBlockNotifier* operator ->() { return &self; }
+       const LDKBlockNotifier* operator &() const { return &self; }
+       const LDKBlockNotifier* operator ->() const { return &self; }
+};
+class ChainWatchInterfaceUtil {
+private:
+       LDKChainWatchInterfaceUtil self;
+public:
+       ChainWatchInterfaceUtil(const ChainWatchInterfaceUtil&) = delete;
+       ~ChainWatchInterfaceUtil() { ChainWatchInterfaceUtil_free(self); }
+       ChainWatchInterfaceUtil(ChainWatchInterfaceUtil&& o) : self(o.self) { memset(&o, 0, sizeof(ChainWatchInterfaceUtil)); }
+       ChainWatchInterfaceUtil(LDKChainWatchInterfaceUtil&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChainWatchInterfaceUtil)); }
+       operator LDKChainWatchInterfaceUtil() { LDKChainWatchInterfaceUtil res = self; memset(&self, 0, sizeof(LDKChainWatchInterfaceUtil)); return res; }
+       LDKChainWatchInterfaceUtil* operator &() { return &self; }
+       LDKChainWatchInterfaceUtil* operator ->() { return &self; }
+       const LDKChainWatchInterfaceUtil* operator &() const { return &self; }
+       const LDKChainWatchInterfaceUtil* operator ->() const { return &self; }
+};
+class OutPoint {
+private:
+       LDKOutPoint self;
+public:
+       OutPoint(const OutPoint&) = delete;
+       ~OutPoint() { OutPoint_free(self); }
+       OutPoint(OutPoint&& o) : self(o.self) { memset(&o, 0, sizeof(OutPoint)); }
+       OutPoint(LDKOutPoint&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKOutPoint)); }
+       operator LDKOutPoint() { LDKOutPoint res = self; memset(&self, 0, sizeof(LDKOutPoint)); return res; }
+       LDKOutPoint* operator &() { return &self; }
+       LDKOutPoint* operator ->() { return &self; }
+       const LDKOutPoint* operator &() const { return &self; }
+       const LDKOutPoint* operator ->() const { return &self; }
+};
+class SpendableOutputDescriptor {
+private:
+       LDKSpendableOutputDescriptor self;
+public:
+       SpendableOutputDescriptor(const SpendableOutputDescriptor&) = delete;
+       ~SpendableOutputDescriptor() { SpendableOutputDescriptor_free(self); }
+       SpendableOutputDescriptor(SpendableOutputDescriptor&& o) : self(o.self) { memset(&o, 0, sizeof(SpendableOutputDescriptor)); }
+       SpendableOutputDescriptor(LDKSpendableOutputDescriptor&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKSpendableOutputDescriptor)); }
+       operator LDKSpendableOutputDescriptor() { LDKSpendableOutputDescriptor res = self; memset(&self, 0, sizeof(LDKSpendableOutputDescriptor)); return res; }
+       LDKSpendableOutputDescriptor* operator &() { return &self; }
+       LDKSpendableOutputDescriptor* operator ->() { return &self; }
+       const LDKSpendableOutputDescriptor* operator &() const { return &self; }
+       const LDKSpendableOutputDescriptor* operator ->() const { return &self; }
+};
+class ChannelKeys {
+private:
+       LDKChannelKeys self;
+public:
+       ChannelKeys(const ChannelKeys&) = delete;
+       ~ChannelKeys() { ChannelKeys_free(self); }
+       ChannelKeys(ChannelKeys&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelKeys)); }
+       ChannelKeys(LDKChannelKeys&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelKeys)); }
+       operator LDKChannelKeys() { LDKChannelKeys res = self; memset(&self, 0, sizeof(LDKChannelKeys)); return res; }
+       LDKChannelKeys* operator &() { return &self; }
+       LDKChannelKeys* operator ->() { return &self; }
+       const LDKChannelKeys* operator &() const { return &self; }
+       const LDKChannelKeys* operator ->() const { return &self; }
+};
+class KeysInterface {
+private:
+       LDKKeysInterface self;
+public:
+       KeysInterface(const KeysInterface&) = delete;
+       ~KeysInterface() { KeysInterface_free(self); }
+       KeysInterface(KeysInterface&& o) : self(o.self) { memset(&o, 0, sizeof(KeysInterface)); }
+       KeysInterface(LDKKeysInterface&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKKeysInterface)); }
+       operator LDKKeysInterface() { LDKKeysInterface res = self; memset(&self, 0, sizeof(LDKKeysInterface)); return res; }
+       LDKKeysInterface* operator &() { return &self; }
+       LDKKeysInterface* operator ->() { return &self; }
+       const LDKKeysInterface* operator &() const { return &self; }
+       const LDKKeysInterface* operator ->() const { return &self; }
+};
+class InMemoryChannelKeys {
+private:
+       LDKInMemoryChannelKeys self;
+public:
+       InMemoryChannelKeys(const InMemoryChannelKeys&) = delete;
+       ~InMemoryChannelKeys() { InMemoryChannelKeys_free(self); }
+       InMemoryChannelKeys(InMemoryChannelKeys&& o) : self(o.self) { memset(&o, 0, sizeof(InMemoryChannelKeys)); }
+       InMemoryChannelKeys(LDKInMemoryChannelKeys&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKInMemoryChannelKeys)); }
+       operator LDKInMemoryChannelKeys() { LDKInMemoryChannelKeys res = self; memset(&self, 0, sizeof(LDKInMemoryChannelKeys)); return res; }
+       LDKInMemoryChannelKeys* operator &() { return &self; }
+       LDKInMemoryChannelKeys* operator ->() { return &self; }
+       const LDKInMemoryChannelKeys* operator &() const { return &self; }
+       const LDKInMemoryChannelKeys* operator ->() const { return &self; }
+};
+class KeysManager {
+private:
+       LDKKeysManager self;
+public:
+       KeysManager(const KeysManager&) = delete;
+       ~KeysManager() { KeysManager_free(self); }
+       KeysManager(KeysManager&& o) : self(o.self) { memset(&o, 0, sizeof(KeysManager)); }
+       KeysManager(LDKKeysManager&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKKeysManager)); }
+       operator LDKKeysManager() { LDKKeysManager res = self; memset(&self, 0, sizeof(LDKKeysManager)); return res; }
+       LDKKeysManager* operator &() { return &self; }
+       LDKKeysManager* operator ->() { return &self; }
+       const LDKKeysManager* operator &() const { return &self; }
+       const LDKKeysManager* operator ->() const { return &self; }
+};
+class ChannelManager {
+private:
+       LDKChannelManager self;
+public:
+       ChannelManager(const ChannelManager&) = delete;
+       ~ChannelManager() { ChannelManager_free(self); }
+       ChannelManager(ChannelManager&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelManager)); }
+       ChannelManager(LDKChannelManager&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelManager)); }
+       operator LDKChannelManager() { LDKChannelManager res = self; memset(&self, 0, sizeof(LDKChannelManager)); return res; }
+       LDKChannelManager* operator &() { return &self; }
+       LDKChannelManager* operator ->() { return &self; }
+       const LDKChannelManager* operator &() const { return &self; }
+       const LDKChannelManager* operator ->() const { return &self; }
+};
+class ChannelDetails {
+private:
+       LDKChannelDetails self;
+public:
+       ChannelDetails(const ChannelDetails&) = delete;
+       ~ChannelDetails() { ChannelDetails_free(self); }
+       ChannelDetails(ChannelDetails&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelDetails)); }
+       ChannelDetails(LDKChannelDetails&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelDetails)); }
+       operator LDKChannelDetails() { LDKChannelDetails res = self; memset(&self, 0, sizeof(LDKChannelDetails)); return res; }
+       LDKChannelDetails* operator &() { return &self; }
+       LDKChannelDetails* operator ->() { return &self; }
+       const LDKChannelDetails* operator &() const { return &self; }
+       const LDKChannelDetails* operator ->() const { return &self; }
+};
+class PaymentSendFailure {
+private:
+       LDKPaymentSendFailure self;
+public:
+       PaymentSendFailure(const PaymentSendFailure&) = delete;
+       ~PaymentSendFailure() { PaymentSendFailure_free(self); }
+       PaymentSendFailure(PaymentSendFailure&& o) : self(o.self) { memset(&o, 0, sizeof(PaymentSendFailure)); }
+       PaymentSendFailure(LDKPaymentSendFailure&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKPaymentSendFailure)); }
+       operator LDKPaymentSendFailure() { LDKPaymentSendFailure res = self; memset(&self, 0, sizeof(LDKPaymentSendFailure)); return res; }
+       LDKPaymentSendFailure* operator &() { return &self; }
+       LDKPaymentSendFailure* operator ->() { return &self; }
+       const LDKPaymentSendFailure* operator &() const { return &self; }
+       const LDKPaymentSendFailure* operator ->() const { return &self; }
+};
+class ChannelManagerReadArgs {
+private:
+       LDKChannelManagerReadArgs self;
+public:
+       ChannelManagerReadArgs(const ChannelManagerReadArgs&) = delete;
+       ~ChannelManagerReadArgs() { ChannelManagerReadArgs_free(self); }
+       ChannelManagerReadArgs(ChannelManagerReadArgs&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelManagerReadArgs)); }
+       ChannelManagerReadArgs(LDKChannelManagerReadArgs&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelManagerReadArgs)); }
+       operator LDKChannelManagerReadArgs() { LDKChannelManagerReadArgs res = self; memset(&self, 0, sizeof(LDKChannelManagerReadArgs)); return res; }
+       LDKChannelManagerReadArgs* operator &() { return &self; }
+       LDKChannelManagerReadArgs* operator ->() { return &self; }
+       const LDKChannelManagerReadArgs* operator &() const { return &self; }
+       const LDKChannelManagerReadArgs* operator ->() const { return &self; }
+};
+class ChannelMonitorUpdate {
+private:
+       LDKChannelMonitorUpdate self;
+public:
+       ChannelMonitorUpdate(const ChannelMonitorUpdate&) = delete;
+       ~ChannelMonitorUpdate() { ChannelMonitorUpdate_free(self); }
+       ChannelMonitorUpdate(ChannelMonitorUpdate&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelMonitorUpdate)); }
+       ChannelMonitorUpdate(LDKChannelMonitorUpdate&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelMonitorUpdate)); }
+       operator LDKChannelMonitorUpdate() { LDKChannelMonitorUpdate res = self; memset(&self, 0, sizeof(LDKChannelMonitorUpdate)); return res; }
+       LDKChannelMonitorUpdate* operator &() { return &self; }
+       LDKChannelMonitorUpdate* operator ->() { return &self; }
+       const LDKChannelMonitorUpdate* operator &() const { return &self; }
+       const LDKChannelMonitorUpdate* operator ->() const { return &self; }
+};
+class ChannelMonitorUpdateErr {
+private:
+       LDKChannelMonitorUpdateErr self;
+public:
+       ChannelMonitorUpdateErr(const ChannelMonitorUpdateErr&) = delete;
+       ChannelMonitorUpdateErr(ChannelMonitorUpdateErr&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelMonitorUpdateErr)); }
+       ChannelMonitorUpdateErr(LDKChannelMonitorUpdateErr&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelMonitorUpdateErr)); }
+       operator LDKChannelMonitorUpdateErr() { LDKChannelMonitorUpdateErr res = self; memset(&self, 0, sizeof(LDKChannelMonitorUpdateErr)); return res; }
+       LDKChannelMonitorUpdateErr* operator &() { return &self; }
+       LDKChannelMonitorUpdateErr* operator ->() { return &self; }
+       const LDKChannelMonitorUpdateErr* operator &() const { return &self; }
+       const LDKChannelMonitorUpdateErr* operator ->() const { return &self; }
+};
+class MonitorUpdateError {
+private:
+       LDKMonitorUpdateError self;
+public:
+       MonitorUpdateError(const MonitorUpdateError&) = delete;
+       ~MonitorUpdateError() { MonitorUpdateError_free(self); }
+       MonitorUpdateError(MonitorUpdateError&& o) : self(o.self) { memset(&o, 0, sizeof(MonitorUpdateError)); }
+       MonitorUpdateError(LDKMonitorUpdateError&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKMonitorUpdateError)); }
+       operator LDKMonitorUpdateError() { LDKMonitorUpdateError res = self; memset(&self, 0, sizeof(LDKMonitorUpdateError)); return res; }
+       LDKMonitorUpdateError* operator &() { return &self; }
+       LDKMonitorUpdateError* operator ->() { return &self; }
+       const LDKMonitorUpdateError* operator &() const { return &self; }
+       const LDKMonitorUpdateError* operator ->() const { return &self; }
+};
+class MonitorEvent {
+private:
+       LDKMonitorEvent self;
+public:
+       MonitorEvent(const MonitorEvent&) = delete;
+       ~MonitorEvent() { MonitorEvent_free(self); }
+       MonitorEvent(MonitorEvent&& o) : self(o.self) { memset(&o, 0, sizeof(MonitorEvent)); }
+       MonitorEvent(LDKMonitorEvent&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKMonitorEvent)); }
+       operator LDKMonitorEvent() { LDKMonitorEvent res = self; memset(&self, 0, sizeof(LDKMonitorEvent)); return res; }
+       LDKMonitorEvent* operator &() { return &self; }
+       LDKMonitorEvent* operator ->() { return &self; }
+       const LDKMonitorEvent* operator &() const { return &self; }
+       const LDKMonitorEvent* operator ->() const { return &self; }
+};
+class HTLCUpdate {
+private:
+       LDKHTLCUpdate self;
+public:
+       HTLCUpdate(const HTLCUpdate&) = delete;
+       ~HTLCUpdate() { HTLCUpdate_free(self); }
+       HTLCUpdate(HTLCUpdate&& o) : self(o.self) { memset(&o, 0, sizeof(HTLCUpdate)); }
+       HTLCUpdate(LDKHTLCUpdate&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKHTLCUpdate)); }
+       operator LDKHTLCUpdate() { LDKHTLCUpdate res = self; memset(&self, 0, sizeof(LDKHTLCUpdate)); return res; }
+       LDKHTLCUpdate* operator &() { return &self; }
+       LDKHTLCUpdate* operator ->() { return &self; }
+       const LDKHTLCUpdate* operator &() const { return &self; }
+       const LDKHTLCUpdate* operator ->() const { return &self; }
+};
+class ChannelMonitor {
+private:
+       LDKChannelMonitor self;
+public:
+       ChannelMonitor(const ChannelMonitor&) = delete;
+       ~ChannelMonitor() { ChannelMonitor_free(self); }
+       ChannelMonitor(ChannelMonitor&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelMonitor)); }
+       ChannelMonitor(LDKChannelMonitor&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelMonitor)); }
+       operator LDKChannelMonitor() { LDKChannelMonitor res = self; memset(&self, 0, sizeof(LDKChannelMonitor)); return res; }
+       LDKChannelMonitor* operator &() { return &self; }
+       LDKChannelMonitor* operator ->() { return &self; }
+       const LDKChannelMonitor* operator &() const { return &self; }
+       const LDKChannelMonitor* operator ->() const { return &self; }
+};
+class ManyChannelMonitor {
+private:
+       LDKManyChannelMonitor self;
+public:
+       ManyChannelMonitor(const ManyChannelMonitor&) = delete;
+       ~ManyChannelMonitor() { ManyChannelMonitor_free(self); }
+       ManyChannelMonitor(ManyChannelMonitor&& o) : self(o.self) { memset(&o, 0, sizeof(ManyChannelMonitor)); }
+       ManyChannelMonitor(LDKManyChannelMonitor&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKManyChannelMonitor)); }
+       operator LDKManyChannelMonitor() { LDKManyChannelMonitor res = self; memset(&self, 0, sizeof(LDKManyChannelMonitor)); return res; }
+       LDKManyChannelMonitor* operator &() { return &self; }
+       LDKManyChannelMonitor* operator ->() { return &self; }
+       const LDKManyChannelMonitor* operator &() const { return &self; }
+       const LDKManyChannelMonitor* operator ->() const { return &self; }
+};
+class DecodeError {
+private:
+       LDKDecodeError self;
+public:
+       DecodeError(const DecodeError&) = delete;
+       ~DecodeError() { DecodeError_free(self); }
+       DecodeError(DecodeError&& o) : self(o.self) { memset(&o, 0, sizeof(DecodeError)); }
+       DecodeError(LDKDecodeError&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKDecodeError)); }
+       operator LDKDecodeError() { LDKDecodeError res = self; memset(&self, 0, sizeof(LDKDecodeError)); return res; }
+       LDKDecodeError* operator &() { return &self; }
+       LDKDecodeError* operator ->() { return &self; }
+       const LDKDecodeError* operator &() const { return &self; }
+       const LDKDecodeError* operator ->() const { return &self; }
+};
+class Init {
+private:
+       LDKInit self;
+public:
+       Init(const Init&) = delete;
+       ~Init() { Init_free(self); }
+       Init(Init&& o) : self(o.self) { memset(&o, 0, sizeof(Init)); }
+       Init(LDKInit&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKInit)); }
+       operator LDKInit() { LDKInit res = self; memset(&self, 0, sizeof(LDKInit)); return res; }
+       LDKInit* operator &() { return &self; }
+       LDKInit* operator ->() { return &self; }
+       const LDKInit* operator &() const { return &self; }
+       const LDKInit* operator ->() const { return &self; }
+};
+class ErrorMessage {
+private:
+       LDKErrorMessage self;
+public:
+       ErrorMessage(const ErrorMessage&) = delete;
+       ~ErrorMessage() { ErrorMessage_free(self); }
+       ErrorMessage(ErrorMessage&& o) : self(o.self) { memset(&o, 0, sizeof(ErrorMessage)); }
+       ErrorMessage(LDKErrorMessage&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKErrorMessage)); }
+       operator LDKErrorMessage() { LDKErrorMessage res = self; memset(&self, 0, sizeof(LDKErrorMessage)); return res; }
+       LDKErrorMessage* operator &() { return &self; }
+       LDKErrorMessage* operator ->() { return &self; }
+       const LDKErrorMessage* operator &() const { return &self; }
+       const LDKErrorMessage* operator ->() const { return &self; }
+};
+class Ping {
+private:
+       LDKPing self;
+public:
+       Ping(const Ping&) = delete;
+       ~Ping() { Ping_free(self); }
+       Ping(Ping&& o) : self(o.self) { memset(&o, 0, sizeof(Ping)); }
+       Ping(LDKPing&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKPing)); }
+       operator LDKPing() { LDKPing res = self; memset(&self, 0, sizeof(LDKPing)); return res; }
+       LDKPing* operator &() { return &self; }
+       LDKPing* operator ->() { return &self; }
+       const LDKPing* operator &() const { return &self; }
+       const LDKPing* operator ->() const { return &self; }
+};
+class Pong {
+private:
+       LDKPong self;
+public:
+       Pong(const Pong&) = delete;
+       ~Pong() { Pong_free(self); }
+       Pong(Pong&& o) : self(o.self) { memset(&o, 0, sizeof(Pong)); }
+       Pong(LDKPong&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKPong)); }
+       operator LDKPong() { LDKPong res = self; memset(&self, 0, sizeof(LDKPong)); return res; }
+       LDKPong* operator &() { return &self; }
+       LDKPong* operator ->() { return &self; }
+       const LDKPong* operator &() const { return &self; }
+       const LDKPong* operator ->() const { return &self; }
+};
+class OpenChannel {
+private:
+       LDKOpenChannel self;
+public:
+       OpenChannel(const OpenChannel&) = delete;
+       ~OpenChannel() { OpenChannel_free(self); }
+       OpenChannel(OpenChannel&& o) : self(o.self) { memset(&o, 0, sizeof(OpenChannel)); }
+       OpenChannel(LDKOpenChannel&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKOpenChannel)); }
+       operator LDKOpenChannel() { LDKOpenChannel res = self; memset(&self, 0, sizeof(LDKOpenChannel)); return res; }
+       LDKOpenChannel* operator &() { return &self; }
+       LDKOpenChannel* operator ->() { return &self; }
+       const LDKOpenChannel* operator &() const { return &self; }
+       const LDKOpenChannel* operator ->() const { return &self; }
+};
+class AcceptChannel {
+private:
+       LDKAcceptChannel self;
+public:
+       AcceptChannel(const AcceptChannel&) = delete;
+       ~AcceptChannel() { AcceptChannel_free(self); }
+       AcceptChannel(AcceptChannel&& o) : self(o.self) { memset(&o, 0, sizeof(AcceptChannel)); }
+       AcceptChannel(LDKAcceptChannel&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKAcceptChannel)); }
+       operator LDKAcceptChannel() { LDKAcceptChannel res = self; memset(&self, 0, sizeof(LDKAcceptChannel)); return res; }
+       LDKAcceptChannel* operator &() { return &self; }
+       LDKAcceptChannel* operator ->() { return &self; }
+       const LDKAcceptChannel* operator &() const { return &self; }
+       const LDKAcceptChannel* operator ->() const { return &self; }
+};
+class FundingCreated {
+private:
+       LDKFundingCreated self;
+public:
+       FundingCreated(const FundingCreated&) = delete;
+       ~FundingCreated() { FundingCreated_free(self); }
+       FundingCreated(FundingCreated&& o) : self(o.self) { memset(&o, 0, sizeof(FundingCreated)); }
+       FundingCreated(LDKFundingCreated&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKFundingCreated)); }
+       operator LDKFundingCreated() { LDKFundingCreated res = self; memset(&self, 0, sizeof(LDKFundingCreated)); return res; }
+       LDKFundingCreated* operator &() { return &self; }
+       LDKFundingCreated* operator ->() { return &self; }
+       const LDKFundingCreated* operator &() const { return &self; }
+       const LDKFundingCreated* operator ->() const { return &self; }
+};
+class FundingSigned {
+private:
+       LDKFundingSigned self;
+public:
+       FundingSigned(const FundingSigned&) = delete;
+       ~FundingSigned() { FundingSigned_free(self); }
+       FundingSigned(FundingSigned&& o) : self(o.self) { memset(&o, 0, sizeof(FundingSigned)); }
+       FundingSigned(LDKFundingSigned&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKFundingSigned)); }
+       operator LDKFundingSigned() { LDKFundingSigned res = self; memset(&self, 0, sizeof(LDKFundingSigned)); return res; }
+       LDKFundingSigned* operator &() { return &self; }
+       LDKFundingSigned* operator ->() { return &self; }
+       const LDKFundingSigned* operator &() const { return &self; }
+       const LDKFundingSigned* operator ->() const { return &self; }
+};
+class FundingLocked {
+private:
+       LDKFundingLocked self;
+public:
+       FundingLocked(const FundingLocked&) = delete;
+       ~FundingLocked() { FundingLocked_free(self); }
+       FundingLocked(FundingLocked&& o) : self(o.self) { memset(&o, 0, sizeof(FundingLocked)); }
+       FundingLocked(LDKFundingLocked&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKFundingLocked)); }
+       operator LDKFundingLocked() { LDKFundingLocked res = self; memset(&self, 0, sizeof(LDKFundingLocked)); return res; }
+       LDKFundingLocked* operator &() { return &self; }
+       LDKFundingLocked* operator ->() { return &self; }
+       const LDKFundingLocked* operator &() const { return &self; }
+       const LDKFundingLocked* operator ->() const { return &self; }
+};
+class Shutdown {
+private:
+       LDKShutdown self;
+public:
+       Shutdown(const Shutdown&) = delete;
+       ~Shutdown() { Shutdown_free(self); }
+       Shutdown(Shutdown&& o) : self(o.self) { memset(&o, 0, sizeof(Shutdown)); }
+       Shutdown(LDKShutdown&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKShutdown)); }
+       operator LDKShutdown() { LDKShutdown res = self; memset(&self, 0, sizeof(LDKShutdown)); return res; }
+       LDKShutdown* operator &() { return &self; }
+       LDKShutdown* operator ->() { return &self; }
+       const LDKShutdown* operator &() const { return &self; }
+       const LDKShutdown* operator ->() const { return &self; }
+};
+class ClosingSigned {
+private:
+       LDKClosingSigned self;
+public:
+       ClosingSigned(const ClosingSigned&) = delete;
+       ~ClosingSigned() { ClosingSigned_free(self); }
+       ClosingSigned(ClosingSigned&& o) : self(o.self) { memset(&o, 0, sizeof(ClosingSigned)); }
+       ClosingSigned(LDKClosingSigned&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKClosingSigned)); }
+       operator LDKClosingSigned() { LDKClosingSigned res = self; memset(&self, 0, sizeof(LDKClosingSigned)); return res; }
+       LDKClosingSigned* operator &() { return &self; }
+       LDKClosingSigned* operator ->() { return &self; }
+       const LDKClosingSigned* operator &() const { return &self; }
+       const LDKClosingSigned* operator ->() const { return &self; }
+};
+class UpdateAddHTLC {
+private:
+       LDKUpdateAddHTLC self;
+public:
+       UpdateAddHTLC(const UpdateAddHTLC&) = delete;
+       ~UpdateAddHTLC() { UpdateAddHTLC_free(self); }
+       UpdateAddHTLC(UpdateAddHTLC&& o) : self(o.self) { memset(&o, 0, sizeof(UpdateAddHTLC)); }
+       UpdateAddHTLC(LDKUpdateAddHTLC&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKUpdateAddHTLC)); }
+       operator LDKUpdateAddHTLC() { LDKUpdateAddHTLC res = self; memset(&self, 0, sizeof(LDKUpdateAddHTLC)); return res; }
+       LDKUpdateAddHTLC* operator &() { return &self; }
+       LDKUpdateAddHTLC* operator ->() { return &self; }
+       const LDKUpdateAddHTLC* operator &() const { return &self; }
+       const LDKUpdateAddHTLC* operator ->() const { return &self; }
+};
+class UpdateFulfillHTLC {
+private:
+       LDKUpdateFulfillHTLC self;
+public:
+       UpdateFulfillHTLC(const UpdateFulfillHTLC&) = delete;
+       ~UpdateFulfillHTLC() { UpdateFulfillHTLC_free(self); }
+       UpdateFulfillHTLC(UpdateFulfillHTLC&& o) : self(o.self) { memset(&o, 0, sizeof(UpdateFulfillHTLC)); }
+       UpdateFulfillHTLC(LDKUpdateFulfillHTLC&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKUpdateFulfillHTLC)); }
+       operator LDKUpdateFulfillHTLC() { LDKUpdateFulfillHTLC res = self; memset(&self, 0, sizeof(LDKUpdateFulfillHTLC)); return res; }
+       LDKUpdateFulfillHTLC* operator &() { return &self; }
+       LDKUpdateFulfillHTLC* operator ->() { return &self; }
+       const LDKUpdateFulfillHTLC* operator &() const { return &self; }
+       const LDKUpdateFulfillHTLC* operator ->() const { return &self; }
+};
+class UpdateFailHTLC {
+private:
+       LDKUpdateFailHTLC self;
+public:
+       UpdateFailHTLC(const UpdateFailHTLC&) = delete;
+       ~UpdateFailHTLC() { UpdateFailHTLC_free(self); }
+       UpdateFailHTLC(UpdateFailHTLC&& o) : self(o.self) { memset(&o, 0, sizeof(UpdateFailHTLC)); }
+       UpdateFailHTLC(LDKUpdateFailHTLC&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKUpdateFailHTLC)); }
+       operator LDKUpdateFailHTLC() { LDKUpdateFailHTLC res = self; memset(&self, 0, sizeof(LDKUpdateFailHTLC)); return res; }
+       LDKUpdateFailHTLC* operator &() { return &self; }
+       LDKUpdateFailHTLC* operator ->() { return &self; }
+       const LDKUpdateFailHTLC* operator &() const { return &self; }
+       const LDKUpdateFailHTLC* operator ->() const { return &self; }
+};
+class UpdateFailMalformedHTLC {
+private:
+       LDKUpdateFailMalformedHTLC self;
+public:
+       UpdateFailMalformedHTLC(const UpdateFailMalformedHTLC&) = delete;
+       ~UpdateFailMalformedHTLC() { UpdateFailMalformedHTLC_free(self); }
+       UpdateFailMalformedHTLC(UpdateFailMalformedHTLC&& o) : self(o.self) { memset(&o, 0, sizeof(UpdateFailMalformedHTLC)); }
+       UpdateFailMalformedHTLC(LDKUpdateFailMalformedHTLC&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKUpdateFailMalformedHTLC)); }
+       operator LDKUpdateFailMalformedHTLC() { LDKUpdateFailMalformedHTLC res = self; memset(&self, 0, sizeof(LDKUpdateFailMalformedHTLC)); return res; }
+       LDKUpdateFailMalformedHTLC* operator &() { return &self; }
+       LDKUpdateFailMalformedHTLC* operator ->() { return &self; }
+       const LDKUpdateFailMalformedHTLC* operator &() const { return &self; }
+       const LDKUpdateFailMalformedHTLC* operator ->() const { return &self; }
+};
+class CommitmentSigned {
+private:
+       LDKCommitmentSigned self;
+public:
+       CommitmentSigned(const CommitmentSigned&) = delete;
+       ~CommitmentSigned() { CommitmentSigned_free(self); }
+       CommitmentSigned(CommitmentSigned&& o) : self(o.self) { memset(&o, 0, sizeof(CommitmentSigned)); }
+       CommitmentSigned(LDKCommitmentSigned&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCommitmentSigned)); }
+       operator LDKCommitmentSigned() { LDKCommitmentSigned res = self; memset(&self, 0, sizeof(LDKCommitmentSigned)); return res; }
+       LDKCommitmentSigned* operator &() { return &self; }
+       LDKCommitmentSigned* operator ->() { return &self; }
+       const LDKCommitmentSigned* operator &() const { return &self; }
+       const LDKCommitmentSigned* operator ->() const { return &self; }
+};
+class RevokeAndACK {
+private:
+       LDKRevokeAndACK self;
+public:
+       RevokeAndACK(const RevokeAndACK&) = delete;
+       ~RevokeAndACK() { RevokeAndACK_free(self); }
+       RevokeAndACK(RevokeAndACK&& o) : self(o.self) { memset(&o, 0, sizeof(RevokeAndACK)); }
+       RevokeAndACK(LDKRevokeAndACK&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKRevokeAndACK)); }
+       operator LDKRevokeAndACK() { LDKRevokeAndACK res = self; memset(&self, 0, sizeof(LDKRevokeAndACK)); return res; }
+       LDKRevokeAndACK* operator &() { return &self; }
+       LDKRevokeAndACK* operator ->() { return &self; }
+       const LDKRevokeAndACK* operator &() const { return &self; }
+       const LDKRevokeAndACK* operator ->() const { return &self; }
+};
+class UpdateFee {
+private:
+       LDKUpdateFee self;
+public:
+       UpdateFee(const UpdateFee&) = delete;
+       ~UpdateFee() { UpdateFee_free(self); }
+       UpdateFee(UpdateFee&& o) : self(o.self) { memset(&o, 0, sizeof(UpdateFee)); }
+       UpdateFee(LDKUpdateFee&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKUpdateFee)); }
+       operator LDKUpdateFee() { LDKUpdateFee res = self; memset(&self, 0, sizeof(LDKUpdateFee)); return res; }
+       LDKUpdateFee* operator &() { return &self; }
+       LDKUpdateFee* operator ->() { return &self; }
+       const LDKUpdateFee* operator &() const { return &self; }
+       const LDKUpdateFee* operator ->() const { return &self; }
+};
+class DataLossProtect {
+private:
+       LDKDataLossProtect self;
+public:
+       DataLossProtect(const DataLossProtect&) = delete;
+       ~DataLossProtect() { DataLossProtect_free(self); }
+       DataLossProtect(DataLossProtect&& o) : self(o.self) { memset(&o, 0, sizeof(DataLossProtect)); }
+       DataLossProtect(LDKDataLossProtect&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKDataLossProtect)); }
+       operator LDKDataLossProtect() { LDKDataLossProtect res = self; memset(&self, 0, sizeof(LDKDataLossProtect)); return res; }
+       LDKDataLossProtect* operator &() { return &self; }
+       LDKDataLossProtect* operator ->() { return &self; }
+       const LDKDataLossProtect* operator &() const { return &self; }
+       const LDKDataLossProtect* operator ->() const { return &self; }
+};
+class ChannelReestablish {
+private:
+       LDKChannelReestablish self;
+public:
+       ChannelReestablish(const ChannelReestablish&) = delete;
+       ~ChannelReestablish() { ChannelReestablish_free(self); }
+       ChannelReestablish(ChannelReestablish&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelReestablish)); }
+       ChannelReestablish(LDKChannelReestablish&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelReestablish)); }
+       operator LDKChannelReestablish() { LDKChannelReestablish res = self; memset(&self, 0, sizeof(LDKChannelReestablish)); return res; }
+       LDKChannelReestablish* operator &() { return &self; }
+       LDKChannelReestablish* operator ->() { return &self; }
+       const LDKChannelReestablish* operator &() const { return &self; }
+       const LDKChannelReestablish* operator ->() const { return &self; }
+};
+class AnnouncementSignatures {
+private:
+       LDKAnnouncementSignatures self;
+public:
+       AnnouncementSignatures(const AnnouncementSignatures&) = delete;
+       ~AnnouncementSignatures() { AnnouncementSignatures_free(self); }
+       AnnouncementSignatures(AnnouncementSignatures&& o) : self(o.self) { memset(&o, 0, sizeof(AnnouncementSignatures)); }
+       AnnouncementSignatures(LDKAnnouncementSignatures&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKAnnouncementSignatures)); }
+       operator LDKAnnouncementSignatures() { LDKAnnouncementSignatures res = self; memset(&self, 0, sizeof(LDKAnnouncementSignatures)); return res; }
+       LDKAnnouncementSignatures* operator &() { return &self; }
+       LDKAnnouncementSignatures* operator ->() { return &self; }
+       const LDKAnnouncementSignatures* operator &() const { return &self; }
+       const LDKAnnouncementSignatures* operator ->() const { return &self; }
+};
+class NetAddress {
+private:
+       LDKNetAddress self;
+public:
+       NetAddress(const NetAddress&) = delete;
+       ~NetAddress() { NetAddress_free(self); }
+       NetAddress(NetAddress&& o) : self(o.self) { memset(&o, 0, sizeof(NetAddress)); }
+       NetAddress(LDKNetAddress&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKNetAddress)); }
+       operator LDKNetAddress() { LDKNetAddress res = self; memset(&self, 0, sizeof(LDKNetAddress)); return res; }
+       LDKNetAddress* operator &() { return &self; }
+       LDKNetAddress* operator ->() { return &self; }
+       const LDKNetAddress* operator &() const { return &self; }
+       const LDKNetAddress* operator ->() const { return &self; }
+};
+class UnsignedNodeAnnouncement {
+private:
+       LDKUnsignedNodeAnnouncement self;
+public:
+       UnsignedNodeAnnouncement(const UnsignedNodeAnnouncement&) = delete;
+       ~UnsignedNodeAnnouncement() { UnsignedNodeAnnouncement_free(self); }
+       UnsignedNodeAnnouncement(UnsignedNodeAnnouncement&& o) : self(o.self) { memset(&o, 0, sizeof(UnsignedNodeAnnouncement)); }
+       UnsignedNodeAnnouncement(LDKUnsignedNodeAnnouncement&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKUnsignedNodeAnnouncement)); }
+       operator LDKUnsignedNodeAnnouncement() { LDKUnsignedNodeAnnouncement res = self; memset(&self, 0, sizeof(LDKUnsignedNodeAnnouncement)); return res; }
+       LDKUnsignedNodeAnnouncement* operator &() { return &self; }
+       LDKUnsignedNodeAnnouncement* operator ->() { return &self; }
+       const LDKUnsignedNodeAnnouncement* operator &() const { return &self; }
+       const LDKUnsignedNodeAnnouncement* operator ->() const { return &self; }
+};
+class NodeAnnouncement {
+private:
+       LDKNodeAnnouncement self;
+public:
+       NodeAnnouncement(const NodeAnnouncement&) = delete;
+       ~NodeAnnouncement() { NodeAnnouncement_free(self); }
+       NodeAnnouncement(NodeAnnouncement&& o) : self(o.self) { memset(&o, 0, sizeof(NodeAnnouncement)); }
+       NodeAnnouncement(LDKNodeAnnouncement&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKNodeAnnouncement)); }
+       operator LDKNodeAnnouncement() { LDKNodeAnnouncement res = self; memset(&self, 0, sizeof(LDKNodeAnnouncement)); return res; }
+       LDKNodeAnnouncement* operator &() { return &self; }
+       LDKNodeAnnouncement* operator ->() { return &self; }
+       const LDKNodeAnnouncement* operator &() const { return &self; }
+       const LDKNodeAnnouncement* operator ->() const { return &self; }
+};
+class UnsignedChannelAnnouncement {
+private:
+       LDKUnsignedChannelAnnouncement self;
+public:
+       UnsignedChannelAnnouncement(const UnsignedChannelAnnouncement&) = delete;
+       ~UnsignedChannelAnnouncement() { UnsignedChannelAnnouncement_free(self); }
+       UnsignedChannelAnnouncement(UnsignedChannelAnnouncement&& o) : self(o.self) { memset(&o, 0, sizeof(UnsignedChannelAnnouncement)); }
+       UnsignedChannelAnnouncement(LDKUnsignedChannelAnnouncement&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKUnsignedChannelAnnouncement)); }
+       operator LDKUnsignedChannelAnnouncement() { LDKUnsignedChannelAnnouncement res = self; memset(&self, 0, sizeof(LDKUnsignedChannelAnnouncement)); return res; }
+       LDKUnsignedChannelAnnouncement* operator &() { return &self; }
+       LDKUnsignedChannelAnnouncement* operator ->() { return &self; }
+       const LDKUnsignedChannelAnnouncement* operator &() const { return &self; }
+       const LDKUnsignedChannelAnnouncement* operator ->() const { return &self; }
+};
+class ChannelAnnouncement {
+private:
+       LDKChannelAnnouncement self;
+public:
+       ChannelAnnouncement(const ChannelAnnouncement&) = delete;
+       ~ChannelAnnouncement() { ChannelAnnouncement_free(self); }
+       ChannelAnnouncement(ChannelAnnouncement&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelAnnouncement)); }
+       ChannelAnnouncement(LDKChannelAnnouncement&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelAnnouncement)); }
+       operator LDKChannelAnnouncement() { LDKChannelAnnouncement res = self; memset(&self, 0, sizeof(LDKChannelAnnouncement)); return res; }
+       LDKChannelAnnouncement* operator &() { return &self; }
+       LDKChannelAnnouncement* operator ->() { return &self; }
+       const LDKChannelAnnouncement* operator &() const { return &self; }
+       const LDKChannelAnnouncement* operator ->() const { return &self; }
+};
+class UnsignedChannelUpdate {
+private:
+       LDKUnsignedChannelUpdate self;
+public:
+       UnsignedChannelUpdate(const UnsignedChannelUpdate&) = delete;
+       ~UnsignedChannelUpdate() { UnsignedChannelUpdate_free(self); }
+       UnsignedChannelUpdate(UnsignedChannelUpdate&& o) : self(o.self) { memset(&o, 0, sizeof(UnsignedChannelUpdate)); }
+       UnsignedChannelUpdate(LDKUnsignedChannelUpdate&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKUnsignedChannelUpdate)); }
+       operator LDKUnsignedChannelUpdate() { LDKUnsignedChannelUpdate res = self; memset(&self, 0, sizeof(LDKUnsignedChannelUpdate)); return res; }
+       LDKUnsignedChannelUpdate* operator &() { return &self; }
+       LDKUnsignedChannelUpdate* operator ->() { return &self; }
+       const LDKUnsignedChannelUpdate* operator &() const { return &self; }
+       const LDKUnsignedChannelUpdate* operator ->() const { return &self; }
+};
+class ChannelUpdate {
+private:
+       LDKChannelUpdate self;
+public:
+       ChannelUpdate(const ChannelUpdate&) = delete;
+       ~ChannelUpdate() { ChannelUpdate_free(self); }
+       ChannelUpdate(ChannelUpdate&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelUpdate)); }
+       ChannelUpdate(LDKChannelUpdate&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelUpdate)); }
+       operator LDKChannelUpdate() { LDKChannelUpdate res = self; memset(&self, 0, sizeof(LDKChannelUpdate)); return res; }
+       LDKChannelUpdate* operator &() { return &self; }
+       LDKChannelUpdate* operator ->() { return &self; }
+       const LDKChannelUpdate* operator &() const { return &self; }
+       const LDKChannelUpdate* operator ->() const { return &self; }
+};
+class ErrorAction {
+private:
+       LDKErrorAction self;
+public:
+       ErrorAction(const ErrorAction&) = delete;
+       ~ErrorAction() { ErrorAction_free(self); }
+       ErrorAction(ErrorAction&& o) : self(o.self) { memset(&o, 0, sizeof(ErrorAction)); }
+       ErrorAction(LDKErrorAction&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKErrorAction)); }
+       operator LDKErrorAction() { LDKErrorAction res = self; memset(&self, 0, sizeof(LDKErrorAction)); return res; }
+       LDKErrorAction* operator &() { return &self; }
+       LDKErrorAction* operator ->() { return &self; }
+       const LDKErrorAction* operator &() const { return &self; }
+       const LDKErrorAction* operator ->() const { return &self; }
+};
+class LightningError {
+private:
+       LDKLightningError self;
+public:
+       LightningError(const LightningError&) = delete;
+       ~LightningError() { LightningError_free(self); }
+       LightningError(LightningError&& o) : self(o.self) { memset(&o, 0, sizeof(LightningError)); }
+       LightningError(LDKLightningError&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKLightningError)); }
+       operator LDKLightningError() { LDKLightningError res = self; memset(&self, 0, sizeof(LDKLightningError)); return res; }
+       LDKLightningError* operator &() { return &self; }
+       LDKLightningError* operator ->() { return &self; }
+       const LDKLightningError* operator &() const { return &self; }
+       const LDKLightningError* operator ->() const { return &self; }
+};
+class CommitmentUpdate {
+private:
+       LDKCommitmentUpdate self;
+public:
+       CommitmentUpdate(const CommitmentUpdate&) = delete;
+       ~CommitmentUpdate() { CommitmentUpdate_free(self); }
+       CommitmentUpdate(CommitmentUpdate&& o) : self(o.self) { memset(&o, 0, sizeof(CommitmentUpdate)); }
+       CommitmentUpdate(LDKCommitmentUpdate&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCommitmentUpdate)); }
+       operator LDKCommitmentUpdate() { LDKCommitmentUpdate res = self; memset(&self, 0, sizeof(LDKCommitmentUpdate)); return res; }
+       LDKCommitmentUpdate* operator &() { return &self; }
+       LDKCommitmentUpdate* operator ->() { return &self; }
+       const LDKCommitmentUpdate* operator &() const { return &self; }
+       const LDKCommitmentUpdate* operator ->() const { return &self; }
+};
+class HTLCFailChannelUpdate {
+private:
+       LDKHTLCFailChannelUpdate self;
+public:
+       HTLCFailChannelUpdate(const HTLCFailChannelUpdate&) = delete;
+       ~HTLCFailChannelUpdate() { HTLCFailChannelUpdate_free(self); }
+       HTLCFailChannelUpdate(HTLCFailChannelUpdate&& o) : self(o.self) { memset(&o, 0, sizeof(HTLCFailChannelUpdate)); }
+       HTLCFailChannelUpdate(LDKHTLCFailChannelUpdate&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKHTLCFailChannelUpdate)); }
+       operator LDKHTLCFailChannelUpdate() { LDKHTLCFailChannelUpdate res = self; memset(&self, 0, sizeof(LDKHTLCFailChannelUpdate)); return res; }
+       LDKHTLCFailChannelUpdate* operator &() { return &self; }
+       LDKHTLCFailChannelUpdate* operator ->() { return &self; }
+       const LDKHTLCFailChannelUpdate* operator &() const { return &self; }
+       const LDKHTLCFailChannelUpdate* operator ->() const { return &self; }
+};
+class ChannelMessageHandler {
+private:
+       LDKChannelMessageHandler self;
+public:
+       ChannelMessageHandler(const ChannelMessageHandler&) = delete;
+       ~ChannelMessageHandler() { ChannelMessageHandler_free(self); }
+       ChannelMessageHandler(ChannelMessageHandler&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelMessageHandler)); }
+       ChannelMessageHandler(LDKChannelMessageHandler&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelMessageHandler)); }
+       operator LDKChannelMessageHandler() { LDKChannelMessageHandler res = self; memset(&self, 0, sizeof(LDKChannelMessageHandler)); return res; }
+       LDKChannelMessageHandler* operator &() { return &self; }
+       LDKChannelMessageHandler* operator ->() { return &self; }
+       const LDKChannelMessageHandler* operator &() const { return &self; }
+       const LDKChannelMessageHandler* operator ->() const { return &self; }
+};
+class RoutingMessageHandler {
+private:
+       LDKRoutingMessageHandler self;
+public:
+       RoutingMessageHandler(const RoutingMessageHandler&) = delete;
+       ~RoutingMessageHandler() { RoutingMessageHandler_free(self); }
+       RoutingMessageHandler(RoutingMessageHandler&& o) : self(o.self) { memset(&o, 0, sizeof(RoutingMessageHandler)); }
+       RoutingMessageHandler(LDKRoutingMessageHandler&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKRoutingMessageHandler)); }
+       operator LDKRoutingMessageHandler() { LDKRoutingMessageHandler res = self; memset(&self, 0, sizeof(LDKRoutingMessageHandler)); return res; }
+       LDKRoutingMessageHandler* operator &() { return &self; }
+       LDKRoutingMessageHandler* operator ->() { return &self; }
+       const LDKRoutingMessageHandler* operator &() const { return &self; }
+       const LDKRoutingMessageHandler* operator ->() const { return &self; }
+};
+class MessageHandler {
+private:
+       LDKMessageHandler self;
+public:
+       MessageHandler(const MessageHandler&) = delete;
+       ~MessageHandler() { MessageHandler_free(self); }
+       MessageHandler(MessageHandler&& o) : self(o.self) { memset(&o, 0, sizeof(MessageHandler)); }
+       MessageHandler(LDKMessageHandler&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKMessageHandler)); }
+       operator LDKMessageHandler() { LDKMessageHandler res = self; memset(&self, 0, sizeof(LDKMessageHandler)); return res; }
+       LDKMessageHandler* operator &() { return &self; }
+       LDKMessageHandler* operator ->() { return &self; }
+       const LDKMessageHandler* operator &() const { return &self; }
+       const LDKMessageHandler* operator ->() const { return &self; }
+};
+class SocketDescriptor {
+private:
+       LDKSocketDescriptor self;
+public:
+       SocketDescriptor(const SocketDescriptor&) = delete;
+       ~SocketDescriptor() { SocketDescriptor_free(self); }
+       SocketDescriptor(SocketDescriptor&& o) : self(o.self) { memset(&o, 0, sizeof(SocketDescriptor)); }
+       SocketDescriptor(LDKSocketDescriptor&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKSocketDescriptor)); }
+       operator LDKSocketDescriptor() { LDKSocketDescriptor res = self; memset(&self, 0, sizeof(LDKSocketDescriptor)); return res; }
+       LDKSocketDescriptor* operator &() { return &self; }
+       LDKSocketDescriptor* operator ->() { return &self; }
+       const LDKSocketDescriptor* operator &() const { return &self; }
+       const LDKSocketDescriptor* operator ->() const { return &self; }
+};
+class PeerHandleError {
+private:
+       LDKPeerHandleError self;
+public:
+       PeerHandleError(const PeerHandleError&) = delete;
+       ~PeerHandleError() { PeerHandleError_free(self); }
+       PeerHandleError(PeerHandleError&& o) : self(o.self) { memset(&o, 0, sizeof(PeerHandleError)); }
+       PeerHandleError(LDKPeerHandleError&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKPeerHandleError)); }
+       operator LDKPeerHandleError() { LDKPeerHandleError res = self; memset(&self, 0, sizeof(LDKPeerHandleError)); return res; }
+       LDKPeerHandleError* operator &() { return &self; }
+       LDKPeerHandleError* operator ->() { return &self; }
+       const LDKPeerHandleError* operator &() const { return &self; }
+       const LDKPeerHandleError* operator ->() const { return &self; }
+};
+class PeerManager {
+private:
+       LDKPeerManager self;
+public:
+       PeerManager(const PeerManager&) = delete;
+       ~PeerManager() { PeerManager_free(self); }
+       PeerManager(PeerManager&& o) : self(o.self) { memset(&o, 0, sizeof(PeerManager)); }
+       PeerManager(LDKPeerManager&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKPeerManager)); }
+       operator LDKPeerManager() { LDKPeerManager res = self; memset(&self, 0, sizeof(LDKPeerManager)); return res; }
+       LDKPeerManager* operator &() { return &self; }
+       LDKPeerManager* operator ->() { return &self; }
+       const LDKPeerManager* operator &() const { return &self; }
+       const LDKPeerManager* operator ->() const { return &self; }
+};
+class TxCreationKeys {
+private:
+       LDKTxCreationKeys self;
+public:
+       TxCreationKeys(const TxCreationKeys&) = delete;
+       ~TxCreationKeys() { TxCreationKeys_free(self); }
+       TxCreationKeys(TxCreationKeys&& o) : self(o.self) { memset(&o, 0, sizeof(TxCreationKeys)); }
+       TxCreationKeys(LDKTxCreationKeys&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKTxCreationKeys)); }
+       operator LDKTxCreationKeys() { LDKTxCreationKeys res = self; memset(&self, 0, sizeof(LDKTxCreationKeys)); return res; }
+       LDKTxCreationKeys* operator &() { return &self; }
+       LDKTxCreationKeys* operator ->() { return &self; }
+       const LDKTxCreationKeys* operator &() const { return &self; }
+       const LDKTxCreationKeys* operator ->() const { return &self; }
+};
+class PreCalculatedTxCreationKeys {
+private:
+       LDKPreCalculatedTxCreationKeys self;
+public:
+       PreCalculatedTxCreationKeys(const PreCalculatedTxCreationKeys&) = delete;
+       ~PreCalculatedTxCreationKeys() { PreCalculatedTxCreationKeys_free(self); }
+       PreCalculatedTxCreationKeys(PreCalculatedTxCreationKeys&& o) : self(o.self) { memset(&o, 0, sizeof(PreCalculatedTxCreationKeys)); }
+       PreCalculatedTxCreationKeys(LDKPreCalculatedTxCreationKeys&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKPreCalculatedTxCreationKeys)); }
+       operator LDKPreCalculatedTxCreationKeys() { LDKPreCalculatedTxCreationKeys res = self; memset(&self, 0, sizeof(LDKPreCalculatedTxCreationKeys)); return res; }
+       LDKPreCalculatedTxCreationKeys* operator &() { return &self; }
+       LDKPreCalculatedTxCreationKeys* operator ->() { return &self; }
+       const LDKPreCalculatedTxCreationKeys* operator &() const { return &self; }
+       const LDKPreCalculatedTxCreationKeys* operator ->() const { return &self; }
+};
+class ChannelPublicKeys {
+private:
+       LDKChannelPublicKeys self;
+public:
+       ChannelPublicKeys(const ChannelPublicKeys&) = delete;
+       ~ChannelPublicKeys() { ChannelPublicKeys_free(self); }
+       ChannelPublicKeys(ChannelPublicKeys&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelPublicKeys)); }
+       ChannelPublicKeys(LDKChannelPublicKeys&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelPublicKeys)); }
+       operator LDKChannelPublicKeys() { LDKChannelPublicKeys res = self; memset(&self, 0, sizeof(LDKChannelPublicKeys)); return res; }
+       LDKChannelPublicKeys* operator &() { return &self; }
+       LDKChannelPublicKeys* operator ->() { return &self; }
+       const LDKChannelPublicKeys* operator &() const { return &self; }
+       const LDKChannelPublicKeys* operator ->() const { return &self; }
+};
+class HTLCOutputInCommitment {
+private:
+       LDKHTLCOutputInCommitment self;
+public:
+       HTLCOutputInCommitment(const HTLCOutputInCommitment&) = delete;
+       ~HTLCOutputInCommitment() { HTLCOutputInCommitment_free(self); }
+       HTLCOutputInCommitment(HTLCOutputInCommitment&& o) : self(o.self) { memset(&o, 0, sizeof(HTLCOutputInCommitment)); }
+       HTLCOutputInCommitment(LDKHTLCOutputInCommitment&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKHTLCOutputInCommitment)); }
+       operator LDKHTLCOutputInCommitment() { LDKHTLCOutputInCommitment res = self; memset(&self, 0, sizeof(LDKHTLCOutputInCommitment)); return res; }
+       LDKHTLCOutputInCommitment* operator &() { return &self; }
+       LDKHTLCOutputInCommitment* operator ->() { return &self; }
+       const LDKHTLCOutputInCommitment* operator &() const { return &self; }
+       const LDKHTLCOutputInCommitment* operator ->() const { return &self; }
+};
+class LocalCommitmentTransaction {
+private:
+       LDKLocalCommitmentTransaction self;
+public:
+       LocalCommitmentTransaction(const LocalCommitmentTransaction&) = delete;
+       ~LocalCommitmentTransaction() { LocalCommitmentTransaction_free(self); }
+       LocalCommitmentTransaction(LocalCommitmentTransaction&& o) : self(o.self) { memset(&o, 0, sizeof(LocalCommitmentTransaction)); }
+       LocalCommitmentTransaction(LDKLocalCommitmentTransaction&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKLocalCommitmentTransaction)); }
+       operator LDKLocalCommitmentTransaction() { LDKLocalCommitmentTransaction res = self; memset(&self, 0, sizeof(LDKLocalCommitmentTransaction)); return res; }
+       LDKLocalCommitmentTransaction* operator &() { return &self; }
+       LDKLocalCommitmentTransaction* operator ->() { return &self; }
+       const LDKLocalCommitmentTransaction* operator &() const { return &self; }
+       const LDKLocalCommitmentTransaction* operator ->() const { return &self; }
+};
+class InitFeatures {
+private:
+       LDKInitFeatures self;
+public:
+       InitFeatures(const InitFeatures&) = delete;
+       ~InitFeatures() { InitFeatures_free(self); }
+       InitFeatures(InitFeatures&& o) : self(o.self) { memset(&o, 0, sizeof(InitFeatures)); }
+       InitFeatures(LDKInitFeatures&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKInitFeatures)); }
+       operator LDKInitFeatures() { LDKInitFeatures res = self; memset(&self, 0, sizeof(LDKInitFeatures)); return res; }
+       LDKInitFeatures* operator &() { return &self; }
+       LDKInitFeatures* operator ->() { return &self; }
+       const LDKInitFeatures* operator &() const { return &self; }
+       const LDKInitFeatures* operator ->() const { return &self; }
+};
+class NodeFeatures {
+private:
+       LDKNodeFeatures self;
+public:
+       NodeFeatures(const NodeFeatures&) = delete;
+       ~NodeFeatures() { NodeFeatures_free(self); }
+       NodeFeatures(NodeFeatures&& o) : self(o.self) { memset(&o, 0, sizeof(NodeFeatures)); }
+       NodeFeatures(LDKNodeFeatures&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKNodeFeatures)); }
+       operator LDKNodeFeatures() { LDKNodeFeatures res = self; memset(&self, 0, sizeof(LDKNodeFeatures)); return res; }
+       LDKNodeFeatures* operator &() { return &self; }
+       LDKNodeFeatures* operator ->() { return &self; }
+       const LDKNodeFeatures* operator &() const { return &self; }
+       const LDKNodeFeatures* operator ->() const { return &self; }
+};
+class ChannelFeatures {
+private:
+       LDKChannelFeatures self;
+public:
+       ChannelFeatures(const ChannelFeatures&) = delete;
+       ~ChannelFeatures() { ChannelFeatures_free(self); }
+       ChannelFeatures(ChannelFeatures&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelFeatures)); }
+       ChannelFeatures(LDKChannelFeatures&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelFeatures)); }
+       operator LDKChannelFeatures() { LDKChannelFeatures res = self; memset(&self, 0, sizeof(LDKChannelFeatures)); return res; }
+       LDKChannelFeatures* operator &() { return &self; }
+       LDKChannelFeatures* operator ->() { return &self; }
+       const LDKChannelFeatures* operator &() const { return &self; }
+       const LDKChannelFeatures* operator ->() const { return &self; }
+};
+class RouteHop {
+private:
+       LDKRouteHop self;
+public:
+       RouteHop(const RouteHop&) = delete;
+       ~RouteHop() { RouteHop_free(self); }
+       RouteHop(RouteHop&& o) : self(o.self) { memset(&o, 0, sizeof(RouteHop)); }
+       RouteHop(LDKRouteHop&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKRouteHop)); }
+       operator LDKRouteHop() { LDKRouteHop res = self; memset(&self, 0, sizeof(LDKRouteHop)); return res; }
+       LDKRouteHop* operator &() { return &self; }
+       LDKRouteHop* operator ->() { return &self; }
+       const LDKRouteHop* operator &() const { return &self; }
+       const LDKRouteHop* operator ->() const { return &self; }
+};
+class Route {
+private:
+       LDKRoute self;
+public:
+       Route(const Route&) = delete;
+       ~Route() { Route_free(self); }
+       Route(Route&& o) : self(o.self) { memset(&o, 0, sizeof(Route)); }
+       Route(LDKRoute&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKRoute)); }
+       operator LDKRoute() { LDKRoute res = self; memset(&self, 0, sizeof(LDKRoute)); return res; }
+       LDKRoute* operator &() { return &self; }
+       LDKRoute* operator ->() { return &self; }
+       const LDKRoute* operator &() const { return &self; }
+       const LDKRoute* operator ->() const { return &self; }
+};
+class RouteHint {
+private:
+       LDKRouteHint self;
+public:
+       RouteHint(const RouteHint&) = delete;
+       ~RouteHint() { RouteHint_free(self); }
+       RouteHint(RouteHint&& o) : self(o.self) { memset(&o, 0, sizeof(RouteHint)); }
+       RouteHint(LDKRouteHint&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKRouteHint)); }
+       operator LDKRouteHint() { LDKRouteHint res = self; memset(&self, 0, sizeof(LDKRouteHint)); return res; }
+       LDKRouteHint* operator &() { return &self; }
+       LDKRouteHint* operator ->() { return &self; }
+       const LDKRouteHint* operator &() const { return &self; }
+       const LDKRouteHint* operator ->() const { return &self; }
+};
+class NetworkGraph {
+private:
+       LDKNetworkGraph self;
+public:
+       NetworkGraph(const NetworkGraph&) = delete;
+       ~NetworkGraph() { NetworkGraph_free(self); }
+       NetworkGraph(NetworkGraph&& o) : self(o.self) { memset(&o, 0, sizeof(NetworkGraph)); }
+       NetworkGraph(LDKNetworkGraph&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKNetworkGraph)); }
+       operator LDKNetworkGraph() { LDKNetworkGraph res = self; memset(&self, 0, sizeof(LDKNetworkGraph)); return res; }
+       LDKNetworkGraph* operator &() { return &self; }
+       LDKNetworkGraph* operator ->() { return &self; }
+       const LDKNetworkGraph* operator &() const { return &self; }
+       const LDKNetworkGraph* operator ->() const { return &self; }
+};
+class LockedNetworkGraph {
+private:
+       LDKLockedNetworkGraph self;
+public:
+       LockedNetworkGraph(const LockedNetworkGraph&) = delete;
+       ~LockedNetworkGraph() { LockedNetworkGraph_free(self); }
+       LockedNetworkGraph(LockedNetworkGraph&& o) : self(o.self) { memset(&o, 0, sizeof(LockedNetworkGraph)); }
+       LockedNetworkGraph(LDKLockedNetworkGraph&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKLockedNetworkGraph)); }
+       operator LDKLockedNetworkGraph() { LDKLockedNetworkGraph res = self; memset(&self, 0, sizeof(LDKLockedNetworkGraph)); return res; }
+       LDKLockedNetworkGraph* operator &() { return &self; }
+       LDKLockedNetworkGraph* operator ->() { return &self; }
+       const LDKLockedNetworkGraph* operator &() const { return &self; }
+       const LDKLockedNetworkGraph* operator ->() const { return &self; }
+};
+class NetGraphMsgHandler {
+private:
+       LDKNetGraphMsgHandler self;
+public:
+       NetGraphMsgHandler(const NetGraphMsgHandler&) = delete;
+       ~NetGraphMsgHandler() { NetGraphMsgHandler_free(self); }
+       NetGraphMsgHandler(NetGraphMsgHandler&& o) : self(o.self) { memset(&o, 0, sizeof(NetGraphMsgHandler)); }
+       NetGraphMsgHandler(LDKNetGraphMsgHandler&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKNetGraphMsgHandler)); }
+       operator LDKNetGraphMsgHandler() { LDKNetGraphMsgHandler res = self; memset(&self, 0, sizeof(LDKNetGraphMsgHandler)); return res; }
+       LDKNetGraphMsgHandler* operator &() { return &self; }
+       LDKNetGraphMsgHandler* operator ->() { return &self; }
+       const LDKNetGraphMsgHandler* operator &() const { return &self; }
+       const LDKNetGraphMsgHandler* operator ->() const { return &self; }
+};
+class DirectionalChannelInfo {
+private:
+       LDKDirectionalChannelInfo self;
+public:
+       DirectionalChannelInfo(const DirectionalChannelInfo&) = delete;
+       ~DirectionalChannelInfo() { DirectionalChannelInfo_free(self); }
+       DirectionalChannelInfo(DirectionalChannelInfo&& o) : self(o.self) { memset(&o, 0, sizeof(DirectionalChannelInfo)); }
+       DirectionalChannelInfo(LDKDirectionalChannelInfo&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKDirectionalChannelInfo)); }
+       operator LDKDirectionalChannelInfo() { LDKDirectionalChannelInfo res = self; memset(&self, 0, sizeof(LDKDirectionalChannelInfo)); return res; }
+       LDKDirectionalChannelInfo* operator &() { return &self; }
+       LDKDirectionalChannelInfo* operator ->() { return &self; }
+       const LDKDirectionalChannelInfo* operator &() const { return &self; }
+       const LDKDirectionalChannelInfo* operator ->() const { return &self; }
+};
+class ChannelInfo {
+private:
+       LDKChannelInfo self;
+public:
+       ChannelInfo(const ChannelInfo&) = delete;
+       ~ChannelInfo() { ChannelInfo_free(self); }
+       ChannelInfo(ChannelInfo&& o) : self(o.self) { memset(&o, 0, sizeof(ChannelInfo)); }
+       ChannelInfo(LDKChannelInfo&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKChannelInfo)); }
+       operator LDKChannelInfo() { LDKChannelInfo res = self; memset(&self, 0, sizeof(LDKChannelInfo)); return res; }
+       LDKChannelInfo* operator &() { return &self; }
+       LDKChannelInfo* operator ->() { return &self; }
+       const LDKChannelInfo* operator &() const { return &self; }
+       const LDKChannelInfo* operator ->() const { return &self; }
+};
+class RoutingFees {
+private:
+       LDKRoutingFees self;
+public:
+       RoutingFees(const RoutingFees&) = delete;
+       ~RoutingFees() { RoutingFees_free(self); }
+       RoutingFees(RoutingFees&& o) : self(o.self) { memset(&o, 0, sizeof(RoutingFees)); }
+       RoutingFees(LDKRoutingFees&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKRoutingFees)); }
+       operator LDKRoutingFees() { LDKRoutingFees res = self; memset(&self, 0, sizeof(LDKRoutingFees)); return res; }
+       LDKRoutingFees* operator &() { return &self; }
+       LDKRoutingFees* operator ->() { return &self; }
+       const LDKRoutingFees* operator &() const { return &self; }
+       const LDKRoutingFees* operator ->() const { return &self; }
+};
+class NodeAnnouncementInfo {
+private:
+       LDKNodeAnnouncementInfo self;
+public:
+       NodeAnnouncementInfo(const NodeAnnouncementInfo&) = delete;
+       ~NodeAnnouncementInfo() { NodeAnnouncementInfo_free(self); }
+       NodeAnnouncementInfo(NodeAnnouncementInfo&& o) : self(o.self) { memset(&o, 0, sizeof(NodeAnnouncementInfo)); }
+       NodeAnnouncementInfo(LDKNodeAnnouncementInfo&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKNodeAnnouncementInfo)); }
+       operator LDKNodeAnnouncementInfo() { LDKNodeAnnouncementInfo res = self; memset(&self, 0, sizeof(LDKNodeAnnouncementInfo)); return res; }
+       LDKNodeAnnouncementInfo* operator &() { return &self; }
+       LDKNodeAnnouncementInfo* operator ->() { return &self; }
+       const LDKNodeAnnouncementInfo* operator &() const { return &self; }
+       const LDKNodeAnnouncementInfo* operator ->() const { return &self; }
+};
+class NodeInfo {
+private:
+       LDKNodeInfo self;
+public:
+       NodeInfo(const NodeInfo&) = delete;
+       ~NodeInfo() { NodeInfo_free(self); }
+       NodeInfo(NodeInfo&& o) : self(o.self) { memset(&o, 0, sizeof(NodeInfo)); }
+       NodeInfo(LDKNodeInfo&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKNodeInfo)); }
+       operator LDKNodeInfo() { LDKNodeInfo res = self; memset(&self, 0, sizeof(LDKNodeInfo)); return res; }
+       LDKNodeInfo* operator &() { return &self; }
+       LDKNodeInfo* operator ->() { return &self; }
+       const LDKNodeInfo* operator &() const { return &self; }
+       const LDKNodeInfo* operator ->() const { return &self; }
+};
+class CVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ {
+private:
+       LDKCVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ self;
+public:
+       CVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ(const CVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ&) = delete;
+       ~CVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ() { CVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ_free(self); }
+       CVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ(CVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ)); }
+       CVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ(LDKCVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ)); }
+       operator LDKCVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ() { LDKCVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ res = self; memset(&self, 0, sizeof(LDKCVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ)); return res; }
+       LDKCVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ* operator &() { return &self; }
+       LDKCVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ* operator ->() { return &self; }
+       const LDKCVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ* operator &() const { return &self; }
+       const LDKCVec_C2Tuple_HTLCOutputInCommitmentSignatureZZ* operator ->() const { return &self; }
+};
+class CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ {
+private:
+       LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ self;
+public:
+       CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ(const CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ&) = delete;
+       ~CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ() { CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ_free(self); }
+       CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ(CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ)); }
+       CVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ(LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ)); }
+       operator LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ() { LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ res = self; memset(&self, 0, sizeof(LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ)); return res; }
+       LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ* operator &() { return &self; }
+       LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ* operator ->() { return &self; }
+       const LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ* operator &() const { return &self; }
+       const LDKCVec_C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZZ* operator ->() const { return &self; }
+};
+class CVec_CVec_RouteHopZZ {
+private:
+       LDKCVec_CVec_RouteHopZZ self;
+public:
+       CVec_CVec_RouteHopZZ(const CVec_CVec_RouteHopZZ&) = delete;
+       ~CVec_CVec_RouteHopZZ() { CVec_CVec_RouteHopZZ_free(self); }
+       CVec_CVec_RouteHopZZ(CVec_CVec_RouteHopZZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_CVec_RouteHopZZ)); }
+       CVec_CVec_RouteHopZZ(LDKCVec_CVec_RouteHopZZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_CVec_RouteHopZZ)); }
+       operator LDKCVec_CVec_RouteHopZZ() { LDKCVec_CVec_RouteHopZZ res = self; memset(&self, 0, sizeof(LDKCVec_CVec_RouteHopZZ)); return res; }
+       LDKCVec_CVec_RouteHopZZ* operator &() { return &self; }
+       LDKCVec_CVec_RouteHopZZ* operator ->() { return &self; }
+       const LDKCVec_CVec_RouteHopZZ* operator &() const { return &self; }
+       const LDKCVec_CVec_RouteHopZZ* operator ->() const { return &self; }
+};
+class CVec_HTLCOutputInCommitmentZ {
+private:
+       LDKCVec_HTLCOutputInCommitmentZ self;
+public:
+       CVec_HTLCOutputInCommitmentZ(const CVec_HTLCOutputInCommitmentZ&) = delete;
+       ~CVec_HTLCOutputInCommitmentZ() { CVec_HTLCOutputInCommitmentZ_free(self); }
+       CVec_HTLCOutputInCommitmentZ(CVec_HTLCOutputInCommitmentZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_HTLCOutputInCommitmentZ)); }
+       CVec_HTLCOutputInCommitmentZ(LDKCVec_HTLCOutputInCommitmentZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_HTLCOutputInCommitmentZ)); }
+       operator LDKCVec_HTLCOutputInCommitmentZ() { LDKCVec_HTLCOutputInCommitmentZ res = self; memset(&self, 0, sizeof(LDKCVec_HTLCOutputInCommitmentZ)); return res; }
+       LDKCVec_HTLCOutputInCommitmentZ* operator &() { return &self; }
+       LDKCVec_HTLCOutputInCommitmentZ* operator ->() { return &self; }
+       const LDKCVec_HTLCOutputInCommitmentZ* operator &() const { return &self; }
+       const LDKCVec_HTLCOutputInCommitmentZ* operator ->() const { return &self; }
+};
+class CResult_NoneMonitorUpdateErrorZ {
+private:
+       LDKCResult_NoneMonitorUpdateErrorZ self;
+public:
+       CResult_NoneMonitorUpdateErrorZ(const CResult_NoneMonitorUpdateErrorZ&) = delete;
+       ~CResult_NoneMonitorUpdateErrorZ() { CResult_NoneMonitorUpdateErrorZ_free(self); }
+       CResult_NoneMonitorUpdateErrorZ(CResult_NoneMonitorUpdateErrorZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_NoneMonitorUpdateErrorZ)); }
+       CResult_NoneMonitorUpdateErrorZ(LDKCResult_NoneMonitorUpdateErrorZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_NoneMonitorUpdateErrorZ)); }
+       operator LDKCResult_NoneMonitorUpdateErrorZ() { LDKCResult_NoneMonitorUpdateErrorZ res = self; memset(&self, 0, sizeof(LDKCResult_NoneMonitorUpdateErrorZ)); return res; }
+       LDKCResult_NoneMonitorUpdateErrorZ* operator &() { return &self; }
+       LDKCResult_NoneMonitorUpdateErrorZ* operator ->() { return &self; }
+       const LDKCResult_NoneMonitorUpdateErrorZ* operator &() const { return &self; }
+       const LDKCResult_NoneMonitorUpdateErrorZ* operator ->() const { return &self; }
+};
+class C2Tuple_Txidu32Z {
+private:
+       LDKC2Tuple_Txidu32Z self;
+public:
+       C2Tuple_Txidu32Z(const C2Tuple_Txidu32Z&) = delete;
+       ~C2Tuple_Txidu32Z() { C2Tuple_Txidu32Z_free(self); }
+       C2Tuple_Txidu32Z(C2Tuple_Txidu32Z&& o) : self(o.self) { memset(&o, 0, sizeof(C2Tuple_Txidu32Z)); }
+       C2Tuple_Txidu32Z(LDKC2Tuple_Txidu32Z&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKC2Tuple_Txidu32Z)); }
+       operator LDKC2Tuple_Txidu32Z() { LDKC2Tuple_Txidu32Z res = self; memset(&self, 0, sizeof(LDKC2Tuple_Txidu32Z)); return res; }
+       LDKC2Tuple_Txidu32Z* operator &() { return &self; }
+       LDKC2Tuple_Txidu32Z* operator ->() { return &self; }
+       const LDKC2Tuple_Txidu32Z* operator &() const { return &self; }
+       const LDKC2Tuple_Txidu32Z* operator ->() const { return &self; }
+};
+class CResult_SignatureNoneZ {
+private:
+       LDKCResult_SignatureNoneZ self;
+public:
+       CResult_SignatureNoneZ(const CResult_SignatureNoneZ&) = delete;
+       ~CResult_SignatureNoneZ() { CResult_SignatureNoneZ_free(self); }
+       CResult_SignatureNoneZ(CResult_SignatureNoneZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_SignatureNoneZ)); }
+       CResult_SignatureNoneZ(LDKCResult_SignatureNoneZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_SignatureNoneZ)); }
+       operator LDKCResult_SignatureNoneZ() { LDKCResult_SignatureNoneZ res = self; memset(&self, 0, sizeof(LDKCResult_SignatureNoneZ)); return res; }
+       LDKCResult_SignatureNoneZ* operator &() { return &self; }
+       LDKCResult_SignatureNoneZ* operator ->() { return &self; }
+       const LDKCResult_SignatureNoneZ* operator &() const { return &self; }
+       const LDKCResult_SignatureNoneZ* operator ->() const { return &self; }
+};
+class CVec_UpdateFailMalformedHTLCZ {
+private:
+       LDKCVec_UpdateFailMalformedHTLCZ self;
+public:
+       CVec_UpdateFailMalformedHTLCZ(const CVec_UpdateFailMalformedHTLCZ&) = delete;
+       ~CVec_UpdateFailMalformedHTLCZ() { CVec_UpdateFailMalformedHTLCZ_free(self); }
+       CVec_UpdateFailMalformedHTLCZ(CVec_UpdateFailMalformedHTLCZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_UpdateFailMalformedHTLCZ)); }
+       CVec_UpdateFailMalformedHTLCZ(LDKCVec_UpdateFailMalformedHTLCZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_UpdateFailMalformedHTLCZ)); }
+       operator LDKCVec_UpdateFailMalformedHTLCZ() { LDKCVec_UpdateFailMalformedHTLCZ res = self; memset(&self, 0, sizeof(LDKCVec_UpdateFailMalformedHTLCZ)); return res; }
+       LDKCVec_UpdateFailMalformedHTLCZ* operator &() { return &self; }
+       LDKCVec_UpdateFailMalformedHTLCZ* operator ->() { return &self; }
+       const LDKCVec_UpdateFailMalformedHTLCZ* operator &() const { return &self; }
+       const LDKCVec_UpdateFailMalformedHTLCZ* operator ->() const { return &self; }
+};
+class CResult_NoneAPIErrorZ {
+private:
+       LDKCResult_NoneAPIErrorZ self;
+public:
+       CResult_NoneAPIErrorZ(const CResult_NoneAPIErrorZ&) = delete;
+       ~CResult_NoneAPIErrorZ() { CResult_NoneAPIErrorZ_free(self); }
+       CResult_NoneAPIErrorZ(CResult_NoneAPIErrorZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_NoneAPIErrorZ)); }
+       CResult_NoneAPIErrorZ(LDKCResult_NoneAPIErrorZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_NoneAPIErrorZ)); }
+       operator LDKCResult_NoneAPIErrorZ() { LDKCResult_NoneAPIErrorZ res = self; memset(&self, 0, sizeof(LDKCResult_NoneAPIErrorZ)); return res; }
+       LDKCResult_NoneAPIErrorZ* operator &() { return &self; }
+       LDKCResult_NoneAPIErrorZ* operator ->() { return &self; }
+       const LDKCResult_NoneAPIErrorZ* operator &() const { return &self; }
+       const LDKCResult_NoneAPIErrorZ* operator ->() const { return &self; }
+};
+class CVec_SpendableOutputDescriptorZ {
+private:
+       LDKCVec_SpendableOutputDescriptorZ self;
+public:
+       CVec_SpendableOutputDescriptorZ(const CVec_SpendableOutputDescriptorZ&) = delete;
+       ~CVec_SpendableOutputDescriptorZ() { CVec_SpendableOutputDescriptorZ_free(self); }
+       CVec_SpendableOutputDescriptorZ(CVec_SpendableOutputDescriptorZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_SpendableOutputDescriptorZ)); }
+       CVec_SpendableOutputDescriptorZ(LDKCVec_SpendableOutputDescriptorZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_SpendableOutputDescriptorZ)); }
+       operator LDKCVec_SpendableOutputDescriptorZ() { LDKCVec_SpendableOutputDescriptorZ res = self; memset(&self, 0, sizeof(LDKCVec_SpendableOutputDescriptorZ)); return res; }
+       LDKCVec_SpendableOutputDescriptorZ* operator &() { return &self; }
+       LDKCVec_SpendableOutputDescriptorZ* operator ->() { return &self; }
+       const LDKCVec_SpendableOutputDescriptorZ* operator &() const { return &self; }
+       const LDKCVec_SpendableOutputDescriptorZ* operator ->() const { return &self; }
+};
+class C2Tuple_SignatureCVec_SignatureZZ {
+private:
+       LDKC2Tuple_SignatureCVec_SignatureZZ self;
+public:
+       C2Tuple_SignatureCVec_SignatureZZ(const C2Tuple_SignatureCVec_SignatureZZ&) = delete;
+       ~C2Tuple_SignatureCVec_SignatureZZ() { C2Tuple_SignatureCVec_SignatureZZ_free(self); }
+       C2Tuple_SignatureCVec_SignatureZZ(C2Tuple_SignatureCVec_SignatureZZ&& o) : self(o.self) { memset(&o, 0, sizeof(C2Tuple_SignatureCVec_SignatureZZ)); }
+       C2Tuple_SignatureCVec_SignatureZZ(LDKC2Tuple_SignatureCVec_SignatureZZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ)); }
+       operator LDKC2Tuple_SignatureCVec_SignatureZZ() { LDKC2Tuple_SignatureCVec_SignatureZZ res = self; memset(&self, 0, sizeof(LDKC2Tuple_SignatureCVec_SignatureZZ)); return res; }
+       LDKC2Tuple_SignatureCVec_SignatureZZ* operator &() { return &self; }
+       LDKC2Tuple_SignatureCVec_SignatureZZ* operator ->() { return &self; }
+       const LDKC2Tuple_SignatureCVec_SignatureZZ* operator &() const { return &self; }
+       const LDKC2Tuple_SignatureCVec_SignatureZZ* operator ->() const { return &self; }
+};
+class CResult_CVec_SignatureZNoneZ {
+private:
+       LDKCResult_CVec_SignatureZNoneZ self;
+public:
+       CResult_CVec_SignatureZNoneZ(const CResult_CVec_SignatureZNoneZ&) = delete;
+       ~CResult_CVec_SignatureZNoneZ() { CResult_CVec_SignatureZNoneZ_free(self); }
+       CResult_CVec_SignatureZNoneZ(CResult_CVec_SignatureZNoneZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_CVec_SignatureZNoneZ)); }
+       CResult_CVec_SignatureZNoneZ(LDKCResult_CVec_SignatureZNoneZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_CVec_SignatureZNoneZ)); }
+       operator LDKCResult_CVec_SignatureZNoneZ() { LDKCResult_CVec_SignatureZNoneZ res = self; memset(&self, 0, sizeof(LDKCResult_CVec_SignatureZNoneZ)); return res; }
+       LDKCResult_CVec_SignatureZNoneZ* operator &() { return &self; }
+       LDKCResult_CVec_SignatureZNoneZ* operator ->() { return &self; }
+       const LDKCResult_CVec_SignatureZNoneZ* operator &() const { return &self; }
+       const LDKCResult_CVec_SignatureZNoneZ* operator ->() const { return &self; }
+};
+class CResult_CVec_u8ZPeerHandleErrorZ {
+private:
+       LDKCResult_CVec_u8ZPeerHandleErrorZ self;
+public:
+       CResult_CVec_u8ZPeerHandleErrorZ(const CResult_CVec_u8ZPeerHandleErrorZ&) = delete;
+       ~CResult_CVec_u8ZPeerHandleErrorZ() { CResult_CVec_u8ZPeerHandleErrorZ_free(self); }
+       CResult_CVec_u8ZPeerHandleErrorZ(CResult_CVec_u8ZPeerHandleErrorZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_CVec_u8ZPeerHandleErrorZ)); }
+       CResult_CVec_u8ZPeerHandleErrorZ(LDKCResult_CVec_u8ZPeerHandleErrorZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ)); }
+       operator LDKCResult_CVec_u8ZPeerHandleErrorZ() { LDKCResult_CVec_u8ZPeerHandleErrorZ res = self; memset(&self, 0, sizeof(LDKCResult_CVec_u8ZPeerHandleErrorZ)); return res; }
+       LDKCResult_CVec_u8ZPeerHandleErrorZ* operator &() { return &self; }
+       LDKCResult_CVec_u8ZPeerHandleErrorZ* operator ->() { return &self; }
+       const LDKCResult_CVec_u8ZPeerHandleErrorZ* operator &() const { return &self; }
+       const LDKCResult_CVec_u8ZPeerHandleErrorZ* operator ->() const { return &self; }
+};
+class CResult_TxCreationKeysSecpErrorZ {
+private:
+       LDKCResult_TxCreationKeysSecpErrorZ self;
+public:
+       CResult_TxCreationKeysSecpErrorZ(const CResult_TxCreationKeysSecpErrorZ&) = delete;
+       ~CResult_TxCreationKeysSecpErrorZ() { CResult_TxCreationKeysSecpErrorZ_free(self); }
+       CResult_TxCreationKeysSecpErrorZ(CResult_TxCreationKeysSecpErrorZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_TxCreationKeysSecpErrorZ)); }
+       CResult_TxCreationKeysSecpErrorZ(LDKCResult_TxCreationKeysSecpErrorZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_TxCreationKeysSecpErrorZ)); }
+       operator LDKCResult_TxCreationKeysSecpErrorZ() { LDKCResult_TxCreationKeysSecpErrorZ res = self; memset(&self, 0, sizeof(LDKCResult_TxCreationKeysSecpErrorZ)); return res; }
+       LDKCResult_TxCreationKeysSecpErrorZ* operator &() { return &self; }
+       LDKCResult_TxCreationKeysSecpErrorZ* operator ->() { return &self; }
+       const LDKCResult_TxCreationKeysSecpErrorZ* operator &() const { return &self; }
+       const LDKCResult_TxCreationKeysSecpErrorZ* operator ->() const { return &self; }
+};
+class CVec_RouteHopZ {
+private:
+       LDKCVec_RouteHopZ self;
+public:
+       CVec_RouteHopZ(const CVec_RouteHopZ&) = delete;
+       ~CVec_RouteHopZ() { CVec_RouteHopZ_free(self); }
+       CVec_RouteHopZ(CVec_RouteHopZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_RouteHopZ)); }
+       CVec_RouteHopZ(LDKCVec_RouteHopZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_RouteHopZ)); }
+       operator LDKCVec_RouteHopZ() { LDKCVec_RouteHopZ res = self; memset(&self, 0, sizeof(LDKCVec_RouteHopZ)); return res; }
+       LDKCVec_RouteHopZ* operator &() { return &self; }
+       LDKCVec_RouteHopZ* operator ->() { return &self; }
+       const LDKCVec_RouteHopZ* operator &() const { return &self; }
+       const LDKCVec_RouteHopZ* operator ->() const { return &self; }
+};
+class CVec_RouteHintZ {
+private:
+       LDKCVec_RouteHintZ self;
+public:
+       CVec_RouteHintZ(const CVec_RouteHintZ&) = delete;
+       ~CVec_RouteHintZ() { CVec_RouteHintZ_free(self); }
+       CVec_RouteHintZ(CVec_RouteHintZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_RouteHintZ)); }
+       CVec_RouteHintZ(LDKCVec_RouteHintZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_RouteHintZ)); }
+       operator LDKCVec_RouteHintZ() { LDKCVec_RouteHintZ res = self; memset(&self, 0, sizeof(LDKCVec_RouteHintZ)); return res; }
+       LDKCVec_RouteHintZ* operator &() { return &self; }
+       LDKCVec_RouteHintZ* operator ->() { return &self; }
+       const LDKCVec_RouteHintZ* operator &() const { return &self; }
+       const LDKCVec_RouteHintZ* operator ->() const { return &self; }
+};
+class CResult_RouteLightningErrorZ {
+private:
+       LDKCResult_RouteLightningErrorZ self;
+public:
+       CResult_RouteLightningErrorZ(const CResult_RouteLightningErrorZ&) = delete;
+       ~CResult_RouteLightningErrorZ() { CResult_RouteLightningErrorZ_free(self); }
+       CResult_RouteLightningErrorZ(CResult_RouteLightningErrorZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_RouteLightningErrorZ)); }
+       CResult_RouteLightningErrorZ(LDKCResult_RouteLightningErrorZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_RouteLightningErrorZ)); }
+       operator LDKCResult_RouteLightningErrorZ() { LDKCResult_RouteLightningErrorZ res = self; memset(&self, 0, sizeof(LDKCResult_RouteLightningErrorZ)); return res; }
+       LDKCResult_RouteLightningErrorZ* operator &() { return &self; }
+       LDKCResult_RouteLightningErrorZ* operator ->() { return &self; }
+       const LDKCResult_RouteLightningErrorZ* operator &() const { return &self; }
+       const LDKCResult_RouteLightningErrorZ* operator ->() const { return &self; }
+};
+class C2Tuple_u64u64Z {
+private:
+       LDKC2Tuple_u64u64Z self;
+public:
+       C2Tuple_u64u64Z(const C2Tuple_u64u64Z&) = delete;
+       ~C2Tuple_u64u64Z() { C2Tuple_u64u64Z_free(self); }
+       C2Tuple_u64u64Z(C2Tuple_u64u64Z&& o) : self(o.self) { memset(&o, 0, sizeof(C2Tuple_u64u64Z)); }
+       C2Tuple_u64u64Z(LDKC2Tuple_u64u64Z&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKC2Tuple_u64u64Z)); }
+       operator LDKC2Tuple_u64u64Z() { LDKC2Tuple_u64u64Z res = self; memset(&self, 0, sizeof(LDKC2Tuple_u64u64Z)); return res; }
+       LDKC2Tuple_u64u64Z* operator &() { return &self; }
+       LDKC2Tuple_u64u64Z* operator ->() { return &self; }
+       const LDKC2Tuple_u64u64Z* operator &() const { return &self; }
+       const LDKC2Tuple_u64u64Z* operator ->() const { return &self; }
+};
+class CVec_MessageSendEventZ {
+private:
+       LDKCVec_MessageSendEventZ self;
+public:
+       CVec_MessageSendEventZ(const CVec_MessageSendEventZ&) = delete;
+       ~CVec_MessageSendEventZ() { CVec_MessageSendEventZ_free(self); }
+       CVec_MessageSendEventZ(CVec_MessageSendEventZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_MessageSendEventZ)); }
+       CVec_MessageSendEventZ(LDKCVec_MessageSendEventZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_MessageSendEventZ)); }
+       operator LDKCVec_MessageSendEventZ() { LDKCVec_MessageSendEventZ res = self; memset(&self, 0, sizeof(LDKCVec_MessageSendEventZ)); return res; }
+       LDKCVec_MessageSendEventZ* operator &() { return &self; }
+       LDKCVec_MessageSendEventZ* operator ->() { return &self; }
+       const LDKCVec_MessageSendEventZ* operator &() const { return &self; }
+       const LDKCVec_MessageSendEventZ* operator ->() const { return &self; }
+};
+class C2Tuple_HTLCOutputInCommitmentSignatureZ {
+private:
+       LDKC2Tuple_HTLCOutputInCommitmentSignatureZ self;
+public:
+       C2Tuple_HTLCOutputInCommitmentSignatureZ(const C2Tuple_HTLCOutputInCommitmentSignatureZ&) = delete;
+       ~C2Tuple_HTLCOutputInCommitmentSignatureZ() { C2Tuple_HTLCOutputInCommitmentSignatureZ_free(self); }
+       C2Tuple_HTLCOutputInCommitmentSignatureZ(C2Tuple_HTLCOutputInCommitmentSignatureZ&& o) : self(o.self) { memset(&o, 0, sizeof(C2Tuple_HTLCOutputInCommitmentSignatureZ)); }
+       C2Tuple_HTLCOutputInCommitmentSignatureZ(LDKC2Tuple_HTLCOutputInCommitmentSignatureZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKC2Tuple_HTLCOutputInCommitmentSignatureZ)); }
+       operator LDKC2Tuple_HTLCOutputInCommitmentSignatureZ() { LDKC2Tuple_HTLCOutputInCommitmentSignatureZ res = self; memset(&self, 0, sizeof(LDKC2Tuple_HTLCOutputInCommitmentSignatureZ)); return res; }
+       LDKC2Tuple_HTLCOutputInCommitmentSignatureZ* operator &() { return &self; }
+       LDKC2Tuple_HTLCOutputInCommitmentSignatureZ* operator ->() { return &self; }
+       const LDKC2Tuple_HTLCOutputInCommitmentSignatureZ* operator &() const { return &self; }
+       const LDKC2Tuple_HTLCOutputInCommitmentSignatureZ* operator ->() const { return &self; }
+};
+class CVec_SignatureZ {
+private:
+       LDKCVec_SignatureZ self;
+public:
+       CVec_SignatureZ(const CVec_SignatureZ&) = delete;
+       ~CVec_SignatureZ() { CVec_SignatureZ_free(self); }
+       CVec_SignatureZ(CVec_SignatureZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_SignatureZ)); }
+       CVec_SignatureZ(LDKCVec_SignatureZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_SignatureZ)); }
+       operator LDKCVec_SignatureZ() { LDKCVec_SignatureZ res = self; memset(&self, 0, sizeof(LDKCVec_SignatureZ)); return res; }
+       LDKCVec_SignatureZ* operator &() { return &self; }
+       LDKCVec_SignatureZ* operator ->() { return &self; }
+       const LDKCVec_SignatureZ* operator &() const { return &self; }
+       const LDKCVec_SignatureZ* operator ->() const { return &self; }
+};
+class CVec_usizeZ {
+private:
+       LDKCVec_usizeZ self;
+public:
+       CVec_usizeZ(const CVec_usizeZ&) = delete;
+       ~CVec_usizeZ() { CVec_usizeZ_free(self); }
+       CVec_usizeZ(CVec_usizeZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_usizeZ)); }
+       CVec_usizeZ(LDKCVec_usizeZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_usizeZ)); }
+       operator LDKCVec_usizeZ() { LDKCVec_usizeZ res = self; memset(&self, 0, sizeof(LDKCVec_usizeZ)); return res; }
+       LDKCVec_usizeZ* operator &() { return &self; }
+       LDKCVec_usizeZ* operator ->() { return &self; }
+       const LDKCVec_usizeZ* operator &() const { return &self; }
+       const LDKCVec_usizeZ* operator ->() const { return &self; }
+};
+class C2Tuple_Scriptu64Z {
+private:
+       LDKC2Tuple_Scriptu64Z self;
+public:
+       C2Tuple_Scriptu64Z(const C2Tuple_Scriptu64Z&) = delete;
+       ~C2Tuple_Scriptu64Z() { C2Tuple_Scriptu64Z_free(self); }
+       C2Tuple_Scriptu64Z(C2Tuple_Scriptu64Z&& o) : self(o.self) { memset(&o, 0, sizeof(C2Tuple_Scriptu64Z)); }
+       C2Tuple_Scriptu64Z(LDKC2Tuple_Scriptu64Z&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKC2Tuple_Scriptu64Z)); }
+       operator LDKC2Tuple_Scriptu64Z() { LDKC2Tuple_Scriptu64Z res = self; memset(&self, 0, sizeof(LDKC2Tuple_Scriptu64Z)); return res; }
+       LDKC2Tuple_Scriptu64Z* operator &() { return &self; }
+       LDKC2Tuple_Scriptu64Z* operator ->() { return &self; }
+       const LDKC2Tuple_Scriptu64Z* operator &() const { return &self; }
+       const LDKC2Tuple_Scriptu64Z* operator ->() const { return &self; }
+};
+class CResult_NoneChannelMonitorUpdateErrZ {
+private:
+       LDKCResult_NoneChannelMonitorUpdateErrZ self;
+public:
+       CResult_NoneChannelMonitorUpdateErrZ(const CResult_NoneChannelMonitorUpdateErrZ&) = delete;
+       ~CResult_NoneChannelMonitorUpdateErrZ() { CResult_NoneChannelMonitorUpdateErrZ_free(self); }
+       CResult_NoneChannelMonitorUpdateErrZ(CResult_NoneChannelMonitorUpdateErrZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_NoneChannelMonitorUpdateErrZ)); }
+       CResult_NoneChannelMonitorUpdateErrZ(LDKCResult_NoneChannelMonitorUpdateErrZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ)); }
+       operator LDKCResult_NoneChannelMonitorUpdateErrZ() { LDKCResult_NoneChannelMonitorUpdateErrZ res = self; memset(&self, 0, sizeof(LDKCResult_NoneChannelMonitorUpdateErrZ)); return res; }
+       LDKCResult_NoneChannelMonitorUpdateErrZ* operator &() { return &self; }
+       LDKCResult_NoneChannelMonitorUpdateErrZ* operator ->() { return &self; }
+       const LDKCResult_NoneChannelMonitorUpdateErrZ* operator &() const { return &self; }
+       const LDKCResult_NoneChannelMonitorUpdateErrZ* operator ->() const { return &self; }
+};
+class CVec_u64Z {
+private:
+       LDKCVec_u64Z self;
+public:
+       CVec_u64Z(const CVec_u64Z&) = delete;
+       ~CVec_u64Z() { CVec_u64Z_free(self); }
+       CVec_u64Z(CVec_u64Z&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_u64Z)); }
+       CVec_u64Z(LDKCVec_u64Z&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_u64Z)); }
+       operator LDKCVec_u64Z() { LDKCVec_u64Z res = self; memset(&self, 0, sizeof(LDKCVec_u64Z)); return res; }
+       LDKCVec_u64Z* operator &() { return &self; }
+       LDKCVec_u64Z* operator ->() { return &self; }
+       const LDKCVec_u64Z* operator &() const { return &self; }
+       const LDKCVec_u64Z* operator ->() const { return &self; }
+};
+class C2Tuple_OutPointScriptZ {
+private:
+       LDKC2Tuple_OutPointScriptZ self;
+public:
+       C2Tuple_OutPointScriptZ(const C2Tuple_OutPointScriptZ&) = delete;
+       ~C2Tuple_OutPointScriptZ() { C2Tuple_OutPointScriptZ_free(self); }
+       C2Tuple_OutPointScriptZ(C2Tuple_OutPointScriptZ&& o) : self(o.self) { memset(&o, 0, sizeof(C2Tuple_OutPointScriptZ)); }
+       C2Tuple_OutPointScriptZ(LDKC2Tuple_OutPointScriptZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKC2Tuple_OutPointScriptZ)); }
+       operator LDKC2Tuple_OutPointScriptZ() { LDKC2Tuple_OutPointScriptZ res = self; memset(&self, 0, sizeof(LDKC2Tuple_OutPointScriptZ)); return res; }
+       LDKC2Tuple_OutPointScriptZ* operator &() { return &self; }
+       LDKC2Tuple_OutPointScriptZ* operator ->() { return &self; }
+       const LDKC2Tuple_OutPointScriptZ* operator &() const { return &self; }
+       const LDKC2Tuple_OutPointScriptZ* operator ->() const { return &self; }
+};
+class CVec_ChannelMonitorZ {
+private:
+       LDKCVec_ChannelMonitorZ self;
+public:
+       CVec_ChannelMonitorZ(const CVec_ChannelMonitorZ&) = delete;
+       ~CVec_ChannelMonitorZ() { CVec_ChannelMonitorZ_free(self); }
+       CVec_ChannelMonitorZ(CVec_ChannelMonitorZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_ChannelMonitorZ)); }
+       CVec_ChannelMonitorZ(LDKCVec_ChannelMonitorZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_ChannelMonitorZ)); }
+       operator LDKCVec_ChannelMonitorZ() { LDKCVec_ChannelMonitorZ res = self; memset(&self, 0, sizeof(LDKCVec_ChannelMonitorZ)); return res; }
+       LDKCVec_ChannelMonitorZ* operator &() { return &self; }
+       LDKCVec_ChannelMonitorZ* operator ->() { return &self; }
+       const LDKCVec_ChannelMonitorZ* operator &() const { return &self; }
+       const LDKCVec_ChannelMonitorZ* operator ->() const { return &self; }
+};
+class CVec_UpdateFulfillHTLCZ {
+private:
+       LDKCVec_UpdateFulfillHTLCZ self;
+public:
+       CVec_UpdateFulfillHTLCZ(const CVec_UpdateFulfillHTLCZ&) = delete;
+       ~CVec_UpdateFulfillHTLCZ() { CVec_UpdateFulfillHTLCZ_free(self); }
+       CVec_UpdateFulfillHTLCZ(CVec_UpdateFulfillHTLCZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_UpdateFulfillHTLCZ)); }
+       CVec_UpdateFulfillHTLCZ(LDKCVec_UpdateFulfillHTLCZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_UpdateFulfillHTLCZ)); }
+       operator LDKCVec_UpdateFulfillHTLCZ() { LDKCVec_UpdateFulfillHTLCZ res = self; memset(&self, 0, sizeof(LDKCVec_UpdateFulfillHTLCZ)); return res; }
+       LDKCVec_UpdateFulfillHTLCZ* operator &() { return &self; }
+       LDKCVec_UpdateFulfillHTLCZ* operator ->() { return &self; }
+       const LDKCVec_UpdateFulfillHTLCZ* operator &() const { return &self; }
+       const LDKCVec_UpdateFulfillHTLCZ* operator ->() const { return &self; }
+};
+class CResult_C2Tuple_Scriptu64ZChainErrorZ {
+private:
+       LDKCResult_C2Tuple_Scriptu64ZChainErrorZ self;
+public:
+       CResult_C2Tuple_Scriptu64ZChainErrorZ(const CResult_C2Tuple_Scriptu64ZChainErrorZ&) = delete;
+       ~CResult_C2Tuple_Scriptu64ZChainErrorZ() { CResult_C2Tuple_Scriptu64ZChainErrorZ_free(self); }
+       CResult_C2Tuple_Scriptu64ZChainErrorZ(CResult_C2Tuple_Scriptu64ZChainErrorZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_C2Tuple_Scriptu64ZChainErrorZ)); }
+       CResult_C2Tuple_Scriptu64ZChainErrorZ(LDKCResult_C2Tuple_Scriptu64ZChainErrorZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_C2Tuple_Scriptu64ZChainErrorZ)); }
+       operator LDKCResult_C2Tuple_Scriptu64ZChainErrorZ() { LDKCResult_C2Tuple_Scriptu64ZChainErrorZ res = self; memset(&self, 0, sizeof(LDKCResult_C2Tuple_Scriptu64ZChainErrorZ)); return res; }
+       LDKCResult_C2Tuple_Scriptu64ZChainErrorZ* operator &() { return &self; }
+       LDKCResult_C2Tuple_Scriptu64ZChainErrorZ* operator ->() { return &self; }
+       const LDKCResult_C2Tuple_Scriptu64ZChainErrorZ* operator &() const { return &self; }
+       const LDKCResult_C2Tuple_Scriptu64ZChainErrorZ* operator ->() const { return &self; }
+};
+class CVec_ChannelDetailsZ {
+private:
+       LDKCVec_ChannelDetailsZ self;
+public:
+       CVec_ChannelDetailsZ(const CVec_ChannelDetailsZ&) = delete;
+       ~CVec_ChannelDetailsZ() { CVec_ChannelDetailsZ_free(self); }
+       CVec_ChannelDetailsZ(CVec_ChannelDetailsZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_ChannelDetailsZ)); }
+       CVec_ChannelDetailsZ(LDKCVec_ChannelDetailsZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_ChannelDetailsZ)); }
+       operator LDKCVec_ChannelDetailsZ() { LDKCVec_ChannelDetailsZ res = self; memset(&self, 0, sizeof(LDKCVec_ChannelDetailsZ)); return res; }
+       LDKCVec_ChannelDetailsZ* operator &() { return &self; }
+       LDKCVec_ChannelDetailsZ* operator ->() { return &self; }
+       const LDKCVec_ChannelDetailsZ* operator &() const { return &self; }
+       const LDKCVec_ChannelDetailsZ* operator ->() const { return &self; }
+};
+class CResult_boolLightningErrorZ {
+private:
+       LDKCResult_boolLightningErrorZ self;
+public:
+       CResult_boolLightningErrorZ(const CResult_boolLightningErrorZ&) = delete;
+       ~CResult_boolLightningErrorZ() { CResult_boolLightningErrorZ_free(self); }
+       CResult_boolLightningErrorZ(CResult_boolLightningErrorZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_boolLightningErrorZ)); }
+       CResult_boolLightningErrorZ(LDKCResult_boolLightningErrorZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_boolLightningErrorZ)); }
+       operator LDKCResult_boolLightningErrorZ() { LDKCResult_boolLightningErrorZ res = self; memset(&self, 0, sizeof(LDKCResult_boolLightningErrorZ)); return res; }
+       LDKCResult_boolLightningErrorZ* operator &() { return &self; }
+       LDKCResult_boolLightningErrorZ* operator ->() { return &self; }
+       const LDKCResult_boolLightningErrorZ* operator &() const { return &self; }
+       const LDKCResult_boolLightningErrorZ* operator ->() const { return &self; }
+};
+class CVec_NetAddressZ {
+private:
+       LDKCVec_NetAddressZ self;
+public:
+       CVec_NetAddressZ(const CVec_NetAddressZ&) = delete;
+       ~CVec_NetAddressZ() { CVec_NetAddressZ_free(self); }
+       CVec_NetAddressZ(CVec_NetAddressZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_NetAddressZ)); }
+       CVec_NetAddressZ(LDKCVec_NetAddressZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_NetAddressZ)); }
+       operator LDKCVec_NetAddressZ() { LDKCVec_NetAddressZ res = self; memset(&self, 0, sizeof(LDKCVec_NetAddressZ)); return res; }
+       LDKCVec_NetAddressZ* operator &() { return &self; }
+       LDKCVec_NetAddressZ* operator ->() { return &self; }
+       const LDKCVec_NetAddressZ* operator &() const { return &self; }
+       const LDKCVec_NetAddressZ* operator ->() const { return &self; }
+};
+class CVec_UpdateFailHTLCZ {
+private:
+       LDKCVec_UpdateFailHTLCZ self;
+public:
+       CVec_UpdateFailHTLCZ(const CVec_UpdateFailHTLCZ&) = delete;
+       ~CVec_UpdateFailHTLCZ() { CVec_UpdateFailHTLCZ_free(self); }
+       CVec_UpdateFailHTLCZ(CVec_UpdateFailHTLCZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_UpdateFailHTLCZ)); }
+       CVec_UpdateFailHTLCZ(LDKCVec_UpdateFailHTLCZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_UpdateFailHTLCZ)); }
+       operator LDKCVec_UpdateFailHTLCZ() { LDKCVec_UpdateFailHTLCZ res = self; memset(&self, 0, sizeof(LDKCVec_UpdateFailHTLCZ)); return res; }
+       LDKCVec_UpdateFailHTLCZ* operator &() { return &self; }
+       LDKCVec_UpdateFailHTLCZ* operator ->() { return &self; }
+       const LDKCVec_UpdateFailHTLCZ* operator &() const { return &self; }
+       const LDKCVec_UpdateFailHTLCZ* operator ->() const { return &self; }
+};
+class C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ {
+private:
+       LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ self;
+public:
+       C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ(const C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ&) = delete;
+       ~C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ() { C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ_free(self); }
+       C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ(C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ&& o) : self(o.self) { memset(&o, 0, sizeof(C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ)); }
+       C3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ)); }
+       operator LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ() { LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ res = self; memset(&self, 0, sizeof(LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ)); return res; }
+       LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* operator &() { return &self; }
+       LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* operator ->() { return &self; }
+       const LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* operator &() const { return &self; }
+       const LDKC3Tuple_ChannelAnnouncementChannelUpdateChannelUpdateZ* operator ->() const { return &self; }
+};
+class CVec_MonitorEventZ {
+private:
+       LDKCVec_MonitorEventZ self;
+public:
+       CVec_MonitorEventZ(const CVec_MonitorEventZ&) = delete;
+       ~CVec_MonitorEventZ() { CVec_MonitorEventZ_free(self); }
+       CVec_MonitorEventZ(CVec_MonitorEventZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_MonitorEventZ)); }
+       CVec_MonitorEventZ(LDKCVec_MonitorEventZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_MonitorEventZ)); }
+       operator LDKCVec_MonitorEventZ() { LDKCVec_MonitorEventZ res = self; memset(&self, 0, sizeof(LDKCVec_MonitorEventZ)); return res; }
+       LDKCVec_MonitorEventZ* operator &() { return &self; }
+       LDKCVec_MonitorEventZ* operator ->() { return &self; }
+       const LDKCVec_MonitorEventZ* operator &() const { return &self; }
+       const LDKCVec_MonitorEventZ* operator ->() const { return &self; }
+};
+class CVec_UpdateAddHTLCZ {
+private:
+       LDKCVec_UpdateAddHTLCZ self;
+public:
+       CVec_UpdateAddHTLCZ(const CVec_UpdateAddHTLCZ&) = delete;
+       ~CVec_UpdateAddHTLCZ() { CVec_UpdateAddHTLCZ_free(self); }
+       CVec_UpdateAddHTLCZ(CVec_UpdateAddHTLCZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_UpdateAddHTLCZ)); }
+       CVec_UpdateAddHTLCZ(LDKCVec_UpdateAddHTLCZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_UpdateAddHTLCZ)); }
+       operator LDKCVec_UpdateAddHTLCZ() { LDKCVec_UpdateAddHTLCZ res = self; memset(&self, 0, sizeof(LDKCVec_UpdateAddHTLCZ)); return res; }
+       LDKCVec_UpdateAddHTLCZ* operator &() { return &self; }
+       LDKCVec_UpdateAddHTLCZ* operator ->() { return &self; }
+       const LDKCVec_UpdateAddHTLCZ* operator &() const { return &self; }
+       const LDKCVec_UpdateAddHTLCZ* operator ->() const { return &self; }
+};
+class CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ {
+private:
+       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ self;
+public:
+       CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ(const CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ&) = delete;
+       ~CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ() { CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ_free(self); }
+       CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ(CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ)); }
+       CResult_C2Tuple_SignatureCVec_SignatureZZNoneZ(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ)); }
+       operator LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ() { LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ res = self; memset(&self, 0, sizeof(LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ)); return res; }
+       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* operator &() { return &self; }
+       LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* operator ->() { return &self; }
+       const LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* operator &() const { return &self; }
+       const LDKCResult_C2Tuple_SignatureCVec_SignatureZZNoneZ* operator ->() const { return &self; }
+};
+class CVec_PublicKeyZ {
+private:
+       LDKCVec_PublicKeyZ self;
+public:
+       CVec_PublicKeyZ(const CVec_PublicKeyZ&) = delete;
+       ~CVec_PublicKeyZ() { CVec_PublicKeyZ_free(self); }
+       CVec_PublicKeyZ(CVec_PublicKeyZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_PublicKeyZ)); }
+       CVec_PublicKeyZ(LDKCVec_PublicKeyZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_PublicKeyZ)); }
+       operator LDKCVec_PublicKeyZ() { LDKCVec_PublicKeyZ res = self; memset(&self, 0, sizeof(LDKCVec_PublicKeyZ)); return res; }
+       LDKCVec_PublicKeyZ* operator &() { return &self; }
+       LDKCVec_PublicKeyZ* operator ->() { return &self; }
+       const LDKCVec_PublicKeyZ* operator &() const { return &self; }
+       const LDKCVec_PublicKeyZ* operator ->() const { return &self; }
+};
+class CResult_NonePeerHandleErrorZ {
+private:
+       LDKCResult_NonePeerHandleErrorZ self;
+public:
+       CResult_NonePeerHandleErrorZ(const CResult_NonePeerHandleErrorZ&) = delete;
+       ~CResult_NonePeerHandleErrorZ() { CResult_NonePeerHandleErrorZ_free(self); }
+       CResult_NonePeerHandleErrorZ(CResult_NonePeerHandleErrorZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_NonePeerHandleErrorZ)); }
+       CResult_NonePeerHandleErrorZ(LDKCResult_NonePeerHandleErrorZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_NonePeerHandleErrorZ)); }
+       operator LDKCResult_NonePeerHandleErrorZ() { LDKCResult_NonePeerHandleErrorZ res = self; memset(&self, 0, sizeof(LDKCResult_NonePeerHandleErrorZ)); return res; }
+       LDKCResult_NonePeerHandleErrorZ* operator &() { return &self; }
+       LDKCResult_NonePeerHandleErrorZ* operator ->() { return &self; }
+       const LDKCResult_NonePeerHandleErrorZ* operator &() const { return &self; }
+       const LDKCResult_NonePeerHandleErrorZ* operator ->() const { return &self; }
+};
+class CVec_NodeAnnouncementZ {
+private:
+       LDKCVec_NodeAnnouncementZ self;
+public:
+       CVec_NodeAnnouncementZ(const CVec_NodeAnnouncementZ&) = delete;
+       ~CVec_NodeAnnouncementZ() { CVec_NodeAnnouncementZ_free(self); }
+       CVec_NodeAnnouncementZ(CVec_NodeAnnouncementZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_NodeAnnouncementZ)); }
+       CVec_NodeAnnouncementZ(LDKCVec_NodeAnnouncementZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_NodeAnnouncementZ)); }
+       operator LDKCVec_NodeAnnouncementZ() { LDKCVec_NodeAnnouncementZ res = self; memset(&self, 0, sizeof(LDKCVec_NodeAnnouncementZ)); return res; }
+       LDKCVec_NodeAnnouncementZ* operator &() { return &self; }
+       LDKCVec_NodeAnnouncementZ* operator ->() { return &self; }
+       const LDKCVec_NodeAnnouncementZ* operator &() const { return &self; }
+       const LDKCVec_NodeAnnouncementZ* operator ->() const { return &self; }
+};
+class CResult_boolPeerHandleErrorZ {
+private:
+       LDKCResult_boolPeerHandleErrorZ self;
+public:
+       CResult_boolPeerHandleErrorZ(const CResult_boolPeerHandleErrorZ&) = delete;
+       ~CResult_boolPeerHandleErrorZ() { CResult_boolPeerHandleErrorZ_free(self); }
+       CResult_boolPeerHandleErrorZ(CResult_boolPeerHandleErrorZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_boolPeerHandleErrorZ)); }
+       CResult_boolPeerHandleErrorZ(LDKCResult_boolPeerHandleErrorZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_boolPeerHandleErrorZ)); }
+       operator LDKCResult_boolPeerHandleErrorZ() { LDKCResult_boolPeerHandleErrorZ res = self; memset(&self, 0, sizeof(LDKCResult_boolPeerHandleErrorZ)); return res; }
+       LDKCResult_boolPeerHandleErrorZ* operator &() { return &self; }
+       LDKCResult_boolPeerHandleErrorZ* operator ->() { return &self; }
+       const LDKCResult_boolPeerHandleErrorZ* operator &() const { return &self; }
+       const LDKCResult_boolPeerHandleErrorZ* operator ->() const { return &self; }
+};
+class CResult_SecretKeySecpErrorZ {
+private:
+       LDKCResult_SecretKeySecpErrorZ self;
+public:
+       CResult_SecretKeySecpErrorZ(const CResult_SecretKeySecpErrorZ&) = delete;
+       ~CResult_SecretKeySecpErrorZ() { CResult_SecretKeySecpErrorZ_free(self); }
+       CResult_SecretKeySecpErrorZ(CResult_SecretKeySecpErrorZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_SecretKeySecpErrorZ)); }
+       CResult_SecretKeySecpErrorZ(LDKCResult_SecretKeySecpErrorZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_SecretKeySecpErrorZ)); }
+       operator LDKCResult_SecretKeySecpErrorZ() { LDKCResult_SecretKeySecpErrorZ res = self; memset(&self, 0, sizeof(LDKCResult_SecretKeySecpErrorZ)); return res; }
+       LDKCResult_SecretKeySecpErrorZ* operator &() { return &self; }
+       LDKCResult_SecretKeySecpErrorZ* operator ->() { return &self; }
+       const LDKCResult_SecretKeySecpErrorZ* operator &() const { return &self; }
+       const LDKCResult_SecretKeySecpErrorZ* operator ->() const { return &self; }
+};
+class CVec_TransactionZ {
+private:
+       LDKCVec_TransactionZ self;
+public:
+       CVec_TransactionZ(const CVec_TransactionZ&) = delete;
+       ~CVec_TransactionZ() { CVec_TransactionZ_free(self); }
+       CVec_TransactionZ(CVec_TransactionZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_TransactionZ)); }
+       CVec_TransactionZ(LDKCVec_TransactionZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_TransactionZ)); }
+       operator LDKCVec_TransactionZ() { LDKCVec_TransactionZ res = self; memset(&self, 0, sizeof(LDKCVec_TransactionZ)); return res; }
+       LDKCVec_TransactionZ* operator &() { return &self; }
+       LDKCVec_TransactionZ* operator ->() { return &self; }
+       const LDKCVec_TransactionZ* operator &() const { return &self; }
+       const LDKCVec_TransactionZ* operator ->() const { return &self; }
+};
+class CResult_NonePaymentSendFailureZ {
+private:
+       LDKCResult_NonePaymentSendFailureZ self;
+public:
+       CResult_NonePaymentSendFailureZ(const CResult_NonePaymentSendFailureZ&) = delete;
+       ~CResult_NonePaymentSendFailureZ() { CResult_NonePaymentSendFailureZ_free(self); }
+       CResult_NonePaymentSendFailureZ(CResult_NonePaymentSendFailureZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_NonePaymentSendFailureZ)); }
+       CResult_NonePaymentSendFailureZ(LDKCResult_NonePaymentSendFailureZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_NonePaymentSendFailureZ)); }
+       operator LDKCResult_NonePaymentSendFailureZ() { LDKCResult_NonePaymentSendFailureZ res = self; memset(&self, 0, sizeof(LDKCResult_NonePaymentSendFailureZ)); return res; }
+       LDKCResult_NonePaymentSendFailureZ* operator &() { return &self; }
+       LDKCResult_NonePaymentSendFailureZ* operator ->() { return &self; }
+       const LDKCResult_NonePaymentSendFailureZ* operator &() const { return &self; }
+       const LDKCResult_NonePaymentSendFailureZ* operator ->() const { return &self; }
+};
+class CVec_EventZ {
+private:
+       LDKCVec_EventZ self;
+public:
+       CVec_EventZ(const CVec_EventZ&) = delete;
+       ~CVec_EventZ() { CVec_EventZ_free(self); }
+       CVec_EventZ(CVec_EventZ&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_EventZ)); }
+       CVec_EventZ(LDKCVec_EventZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_EventZ)); }
+       operator LDKCVec_EventZ() { LDKCVec_EventZ res = self; memset(&self, 0, sizeof(LDKCVec_EventZ)); return res; }
+       LDKCVec_EventZ* operator &() { return &self; }
+       LDKCVec_EventZ* operator ->() { return &self; }
+       const LDKCVec_EventZ* operator &() const { return &self; }
+       const LDKCVec_EventZ* operator ->() const { return &self; }
+};
+class CVec_u8Z {
+private:
+       LDKCVec_u8Z self;
+public:
+       CVec_u8Z(const CVec_u8Z&) = delete;
+       ~CVec_u8Z() { CVec_u8Z_free(self); }
+       CVec_u8Z(CVec_u8Z&& o) : self(o.self) { memset(&o, 0, sizeof(CVec_u8Z)); }
+       CVec_u8Z(LDKCVec_u8Z&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCVec_u8Z)); }
+       operator LDKCVec_u8Z() { LDKCVec_u8Z res = self; memset(&self, 0, sizeof(LDKCVec_u8Z)); return res; }
+       LDKCVec_u8Z* operator &() { return &self; }
+       LDKCVec_u8Z* operator ->() { return &self; }
+       const LDKCVec_u8Z* operator &() const { return &self; }
+       const LDKCVec_u8Z* operator ->() const { return &self; }
+};
+class CResult_PublicKeySecpErrorZ {
+private:
+       LDKCResult_PublicKeySecpErrorZ self;
+public:
+       CResult_PublicKeySecpErrorZ(const CResult_PublicKeySecpErrorZ&) = delete;
+       ~CResult_PublicKeySecpErrorZ() { CResult_PublicKeySecpErrorZ_free(self); }
+       CResult_PublicKeySecpErrorZ(CResult_PublicKeySecpErrorZ&& o) : self(o.self) { memset(&o, 0, sizeof(CResult_PublicKeySecpErrorZ)); }
+       CResult_PublicKeySecpErrorZ(LDKCResult_PublicKeySecpErrorZ&& m_self) : self(m_self) { memset(&m_self, 0, sizeof(LDKCResult_PublicKeySecpErrorZ)); }
+       operator LDKCResult_PublicKeySecpErrorZ() { LDKCResult_PublicKeySecpErrorZ res = self; memset(&self, 0, sizeof(LDKCResult_PublicKeySecpErrorZ)); return res; }
+       LDKCResult_PublicKeySecpErrorZ* operator &() { return &self; }
+       LDKCResult_PublicKeySecpErrorZ* operator ->() { return &self; }
+       const LDKCResult_PublicKeySecpErrorZ* operator &() const { return &self; }
+       const LDKCResult_PublicKeySecpErrorZ* operator ->() const { return &self; }
+};
+}