b5313735af5a7b3348ac2e7f592c11d2e953cd2e
[ldk-java] / c_sharp / src / org / ldk / structs / HTLCDestination.cs
1 using org.ldk.impl;
2 using org.ldk.enums;
3 using org.ldk.util;
4 using System;
5
6 namespace org { namespace ldk { namespace structs {
7
8 /**
9  * Intended destination of a failed HTLC as indicated in [`Event::HTLCHandlingFailed`].
10  */
11 public class HTLCDestination : CommonBase {
12         protected HTLCDestination(object _dummy, long ptr) : base(ptr) { }
13         ~HTLCDestination() {
14                 if (ptr != 0) { bindings.HTLCDestination_free(ptr); }
15         }
16
17         internal static HTLCDestination constr_from_ptr(long ptr) {
18                 long raw_ty = bindings.LDKHTLCDestination_ty_from_ptr(ptr);
19                 switch (raw_ty) {
20                         case 0: return new HTLCDestination_NextHopChannel(ptr);
21                         case 1: return new HTLCDestination_UnknownNextHop(ptr);
22                         case 2: return new HTLCDestination_InvalidForward(ptr);
23                         case 3: return new HTLCDestination_FailedPayment(ptr);
24                         default:
25                                 throw new ArgumentException("Impossible enum variant");
26                 }
27         }
28
29         /** A HTLCDestination of type NextHopChannel */
30         public class HTLCDestination_NextHopChannel : HTLCDestination {
31                 /**
32                  * The `node_id` of the next node. For backwards compatibility, this field is
33                  * marked as optional, versions prior to 0.0.110 may not always be able to provide
34                  * counterparty node information.
35                  * 
36                  * Note that this (or a relevant inner pointer) may be NULL or all-0s to represent None
37                  */
38                 public byte[] node_id;
39                 /**
40                  * The outgoing `channel_id` between us and the next node.
41                  */
42                 public byte[] channel_id;
43                 internal HTLCDestination_NextHopChannel(long ptr) : base(null, ptr) {
44                         this.node_id = bindings.LDKHTLCDestination_NextHopChannel_get_node_id(ptr);
45                         this.channel_id = bindings.LDKHTLCDestination_NextHopChannel_get_channel_id(ptr);
46                 }
47         }
48         /** A HTLCDestination of type UnknownNextHop */
49         public class HTLCDestination_UnknownNextHop : HTLCDestination {
50                 /**
51                  * Short channel id we are requesting to forward an HTLC to.
52                  */
53                 public long requested_forward_scid;
54                 internal HTLCDestination_UnknownNextHop(long ptr) : base(null, ptr) {
55                         this.requested_forward_scid = bindings.LDKHTLCDestination_UnknownNextHop_get_requested_forward_scid(ptr);
56                 }
57         }
58         /** A HTLCDestination of type InvalidForward */
59         public class HTLCDestination_InvalidForward : HTLCDestination {
60                 /**
61                  * Short channel id we are requesting to forward an HTLC to.
62                  */
63                 public long requested_forward_scid;
64                 internal HTLCDestination_InvalidForward(long ptr) : base(null, ptr) {
65                         this.requested_forward_scid = bindings.LDKHTLCDestination_InvalidForward_get_requested_forward_scid(ptr);
66                 }
67         }
68         /** A HTLCDestination of type FailedPayment */
69         public class HTLCDestination_FailedPayment : HTLCDestination {
70                 /**
71                  * The payment hash of the payment we attempted to process.
72                  */
73                 public byte[] payment_hash;
74                 internal HTLCDestination_FailedPayment(long ptr) : base(null, ptr) {
75                         this.payment_hash = bindings.LDKHTLCDestination_FailedPayment_get_payment_hash(ptr);
76                 }
77         }
78         internal long clone_ptr() {
79                 long ret = bindings.HTLCDestination_clone_ptr(this.ptr);
80                 GC.KeepAlive(this);
81                 return ret;
82         }
83
84         /**
85          * Creates a copy of the HTLCDestination
86          */
87         public HTLCDestination clone() {
88                 long ret = bindings.HTLCDestination_clone(this.ptr);
89                 GC.KeepAlive(this);
90                 if (ret >= 0 && ret <= 4096) { return null; }
91                 org.ldk.structs.HTLCDestination ret_hu_conv = org.ldk.structs.HTLCDestination.constr_from_ptr(ret);
92                 if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(this); };
93                 return ret_hu_conv;
94         }
95
96         /**
97          * Utility method to constructs a new NextHopChannel-variant HTLCDestination
98          */
99         public static HTLCDestination next_hop_channel(byte[] node_id, byte[] channel_id) {
100                 long ret = bindings.HTLCDestination_next_hop_channel(InternalUtils.check_arr_len(node_id, 33), InternalUtils.check_arr_len(channel_id, 32));
101                 GC.KeepAlive(node_id);
102                 GC.KeepAlive(channel_id);
103                 if (ret >= 0 && ret <= 4096) { return null; }
104                 org.ldk.structs.HTLCDestination ret_hu_conv = org.ldk.structs.HTLCDestination.constr_from_ptr(ret);
105                 if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
106                 return ret_hu_conv;
107         }
108
109         /**
110          * Utility method to constructs a new UnknownNextHop-variant HTLCDestination
111          */
112         public static HTLCDestination unknown_next_hop(long requested_forward_scid) {
113                 long ret = bindings.HTLCDestination_unknown_next_hop(requested_forward_scid);
114                 GC.KeepAlive(requested_forward_scid);
115                 if (ret >= 0 && ret <= 4096) { return null; }
116                 org.ldk.structs.HTLCDestination ret_hu_conv = org.ldk.structs.HTLCDestination.constr_from_ptr(ret);
117                 if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
118                 return ret_hu_conv;
119         }
120
121         /**
122          * Utility method to constructs a new InvalidForward-variant HTLCDestination
123          */
124         public static HTLCDestination invalid_forward(long requested_forward_scid) {
125                 long ret = bindings.HTLCDestination_invalid_forward(requested_forward_scid);
126                 GC.KeepAlive(requested_forward_scid);
127                 if (ret >= 0 && ret <= 4096) { return null; }
128                 org.ldk.structs.HTLCDestination ret_hu_conv = org.ldk.structs.HTLCDestination.constr_from_ptr(ret);
129                 if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
130                 return ret_hu_conv;
131         }
132
133         /**
134          * Utility method to constructs a new FailedPayment-variant HTLCDestination
135          */
136         public static HTLCDestination failed_payment(byte[] payment_hash) {
137                 long ret = bindings.HTLCDestination_failed_payment(InternalUtils.check_arr_len(payment_hash, 32));
138                 GC.KeepAlive(payment_hash);
139                 if (ret >= 0 && ret <= 4096) { return null; }
140                 org.ldk.structs.HTLCDestination ret_hu_conv = org.ldk.structs.HTLCDestination.constr_from_ptr(ret);
141                 if (ret_hu_conv != null) { ret_hu_conv.ptrs_to.AddLast(ret_hu_conv); };
142                 return ret_hu_conv;
143         }
144
145         /**
146          * Checks if two HTLCDestinations contain equal inner contents.
147          * This ignores pointers and is_owned flags and looks at the values in fields.
148          */
149         public bool eq(org.ldk.structs.HTLCDestination b) {
150                 bool ret = bindings.HTLCDestination_eq(this.ptr, b == null ? 0 : b.ptr);
151                 GC.KeepAlive(this);
152                 GC.KeepAlive(b);
153                 return ret;
154         }
155
156         public override bool Equals(object o) {
157                 if (!(o is HTLCDestination)) return false;
158                 return this.eq((HTLCDestination)o);
159         }
160         /**
161          * Serialize the HTLCDestination object into a byte array which can be read by HTLCDestination_read
162          */
163         public byte[] write() {
164                 byte[] ret = bindings.HTLCDestination_write(this.ptr);
165                 GC.KeepAlive(this);
166                 return ret;
167         }
168
169 }
170 } } }