Skip to content

Commit f62b407

Browse files
committed
Add method to print Swift bindings version
1 parent 32b7bd5 commit f62b407

File tree

4 files changed

+127
-65
lines changed

4 files changed

+127
-65
lines changed

bindings/LDK/Bindings.swift

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
//
77

88
import Foundation
9+
import os
910

1011
public typealias LDKTransactionOutputs = LDKC2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ
1112
public typealias TransactionOutputs = C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZ
@@ -63,7 +64,9 @@ open class NativeTypeWrapper: Hashable {
6364

6465
public class Bindings {
6566

67+
internal static let logger = os.Logger(subsystem: Bundle.main.bundleIdentifier!, category: "ldk")
6668
internal static var minimumPrintSeverity: PrintSeverity = .WARNING
69+
6770

6871
public enum PrintSeverity: UInt {
6972
case DEBUG = 0
@@ -73,7 +76,15 @@ public class Bindings {
7376

7477
internal class func print(_ string: String, severity: PrintSeverity = .DEBUG) {
7578
if severity.rawValue >= Self.minimumPrintSeverity.rawValue {
76-
Swift.print(string)
79+
if severity == Self.PrintSeverity.DEBUG {
80+
logger.debug("\(string)")
81+
}else if severity == Self.PrintSeverity.WARNING {
82+
logger.warning("\(string)")
83+
}else if severity == Self.PrintSeverity.ERROR {
84+
logger.error("\(string)")
85+
}else {
86+
logger.log("\(string)")
87+
}
7788
}
7889
}
7990

@@ -4563,6 +4574,10 @@ withUnsafePointer(to: htlc.cOpaqueStruct!) { (htlcPointer: UnsafePointer<LDKHTLC
45634574
}
45644575
}
45654576
}
4577+
4578+
public class func get_ldk_swift_bindings_version() -> String {
4579+
return "32b7bd5b870675c84f167046cd4e15e754c466b6"
4580+
}
45664581

45674582
}
45684583

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import os
2+
import re
3+
import subprocess
4+
5+
from src.generators.util_generators import UtilGenerator
6+
7+
8+
class VersionStringGenerator(UtilGenerator):
9+
10+
def __init__(self) -> None:
11+
super().__init__()
12+
self.template_regex = re.compile('(")(\/\* SWIFT_BINDINGS_VERSION \*\/)(")')
13+
self.loadTemplate()
14+
self.raw_tuple_generators = {}
15+
16+
def get_git_version(self) -> str:
17+
working_directory = os.path.dirname(__file__)
18+
version_long = subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=working_directory).decode(
19+
'ascii'
20+
).strip()
21+
version_short = subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD'], cwd=working_directory).decode(
22+
'ascii'
23+
).strip()
24+
version_description = subprocess.check_output(
25+
['git', 'describe', '--tag', '--dirty'],
26+
cwd=working_directory
27+
).decode('ascii').strip()
28+
print('Git versions:', '\n', version_description, '\n', version_short, '\n', version_long, '\n')
29+
return version_long
30+
31+
def obtain_version_string(self):
32+
version_string = self.get_git_version()
33+
self.filled_template = version_string

src/sdk_generator.py

Lines changed: 74 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -7,106 +7,116 @@
77
from src.generators.util_generators.vector_generator import VectorGenerator
88
from src.generators.util_generators.byte_array_generator import ByteArrayGenerator
99
from src.generators.util_generators.static_method_generator import StaticMethodGenerator
10+
from src.generators.util_generators.version_string_generator import VersionStringGenerator
1011

1112
import src.conversion_helper
1213

1314

1415
def parse_header() -> LightningHeaderParser:
15-
header_file = LightningHeaderParser.get_file()
16+
header_file = LightningHeaderParser.get_file()
1617

17-
header_parser = LightningHeaderParser()
18-
header_parser.parse_header_file(header_file)
19-
return header_parser
18+
header_parser = LightningHeaderParser()
19+
header_parser.parse_header_file(header_file)
20+
return header_parser
2021

2122

2223
def generate_binding_methods(parser: LightningHeaderParser):
23-
# firstly, let's generate the vector utilities
24-
byte_array_generator = ByteArrayGenerator()
25-
vector_generator = VectorGenerator()
26-
static_method_generator = StaticMethodGenerator()
27-
28-
byte_arrays = sorted(parser.byte_arrays)
29-
for current_byte_array_type in byte_arrays:
30-
byte_array_details = parser.type_details[current_byte_array_type]
31-
byte_array_generator.generate_byte_array(current_byte_array_type, byte_array_details)
32-
byte_array_generator.generate_tuple_converter(80)
33-
byte_array_generator.finalize()
34-
35-
vectors = sorted(parser.vec_types)
36-
for current_vector in vectors:
37-
if current_vector == 'LDKTransaction':
38-
continue
39-
vector_type_details = parser.type_details[current_vector]
40-
vector_generator.generate_vector(current_vector, vector_type_details)
41-
vector_generator.finalize()
42-
43-
static_method_generator.generate_static_methods(parser.static_methods)
44-
static_method_generator.finalize()
24+
# firstly, let's generate the vector utilities
25+
byte_array_generator = ByteArrayGenerator()
26+
vector_generator = VectorGenerator()
27+
static_method_generator = StaticMethodGenerator()
28+
version_string_generator = VersionStringGenerator()
29+
30+
byte_arrays = sorted(parser.byte_arrays)
31+
for current_byte_array_type in byte_arrays:
32+
byte_array_details = parser.type_details[current_byte_array_type]
33+
byte_array_generator.generate_byte_array(current_byte_array_type, byte_array_details)
34+
byte_array_generator.generate_tuple_converter(80)
35+
byte_array_generator.finalize()
36+
37+
vectors = sorted(parser.vec_types)
38+
for current_vector in vectors:
39+
if current_vector == 'LDKTransaction':
40+
continue
41+
vector_type_details = parser.type_details[current_vector]
42+
vector_generator.generate_vector(current_vector, vector_type_details)
43+
vector_generator.finalize()
44+
45+
static_method_generator.generate_static_methods(parser.static_methods)
46+
static_method_generator.finalize()
47+
48+
version_string_generator.obtain_version_string()
49+
version_string_generator.finalize()
4550

4651

4752
def generate_opaque_struct_wrappers(parser: LightningHeaderParser, returned_trait_instances=set()):
48-
opaque_struct_generator = OpaqueStructGenerator()
53+
opaque_struct_generator = OpaqueStructGenerator()
4954

50-
opaque_structs = parser.opaque_structs
51-
for current_struct in opaque_structs:
52-
current_struct_details = parser.type_details[current_struct]
53-
opaque_struct_generator.generate_opaque_struct(current_struct, current_struct_details, all_type_details=parser.type_details, trait_structs=parser.trait_structs,
54-
returned_trait_instances=returned_trait_instances)
55+
opaque_structs = parser.opaque_structs
56+
for current_struct in opaque_structs:
57+
current_struct_details = parser.type_details[current_struct]
58+
opaque_struct_generator.generate_opaque_struct(
59+
current_struct,
60+
current_struct_details,
61+
all_type_details=parser.type_details,
62+
trait_structs=parser.trait_structs,
63+
returned_trait_instances=returned_trait_instances
64+
)
5565

5666

5767
def generate_tuple_wrappers(parser: LightningHeaderParser):
58-
tuple_generator = TupleGenerator()
68+
tuple_generator = TupleGenerator()
5969

60-
tuples = parser.tuple_types
61-
for current_tuple in tuples:
62-
current_tuple_details = parser.type_details[current_tuple]
63-
tuple_generator.generate_tuple(current_tuple, current_tuple_details, all_type_details=parser.type_details)
70+
tuples = parser.tuple_types
71+
for current_tuple in tuples:
72+
current_tuple_details = parser.type_details[current_tuple]
73+
tuple_generator.generate_tuple(current_tuple, current_tuple_details, all_type_details=parser.type_details)
6474

6575

6676
def generate_result_wrappers(parser: LightningHeaderParser):
67-
result_generator = ResultGenerator()
77+
result_generator = ResultGenerator()
6878

69-
results = parser.result_types
70-
for current_result in results:
71-
current_result_details = parser.type_details[current_result]
72-
result_generator.generate_result(current_result, current_result_details, all_type_details=parser.type_details)
79+
results = parser.result_types
80+
for current_result in results:
81+
current_result_details = parser.type_details[current_result]
82+
result_generator.generate_result(current_result, current_result_details, all_type_details=parser.type_details)
7383

7484

7585
def generate_option_wrappers(parser: LightningHeaderParser):
76-
option_generator = OptionGenerator()
86+
option_generator = OptionGenerator()
7787

78-
options = parser.option_types
79-
for current_option in options:
80-
current_option_details = parser.type_details[current_option]
81-
option_generator.generate_option(current_option, current_option_details, all_type_details=parser.type_details)
88+
options = parser.option_types
89+
for current_option in options:
90+
current_option_details = parser.type_details[current_option]
91+
option_generator.generate_option(current_option, current_option_details, all_type_details=parser.type_details)
8292

8393

8494
def generate_trait_placeholders(parser: LightningHeaderParser, returned_trait_instances=set()):
85-
trait_generator = TraitGenerator()
95+
trait_generator = TraitGenerator()
8696

87-
traits = parser.trait_structs
88-
for current_trait in traits:
89-
current_trait_details = parser.type_details[current_trait]
90-
trait_generator.generate_trait(current_trait, current_trait_details)
97+
traits = parser.trait_structs
98+
for current_trait in traits:
99+
current_trait_details = parser.type_details[current_trait]
100+
trait_generator.generate_trait(current_trait, current_trait_details)
91101

92102

93103
def initialize_conversion_helper_knowledge(parser: LightningHeaderParser):
94-
src.conversion_helper.ConversionHelper.trait_structs = parser.trait_structs
104+
src.conversion_helper.ConversionHelper.trait_structs = parser.trait_structs
95105

96106

97107
def generate_sdk():
98-
returned_trait_instances = set()
99-
parser = parse_header()
108+
returned_trait_instances = set()
109+
parser = parse_header()
100110

101-
# initialize_conversion_helper_knowledge(parser)
111+
# initialize_conversion_helper_knowledge(parser)
102112

103-
generate_binding_methods(parser)
104-
generate_opaque_struct_wrappers(parser, returned_trait_instances)
105-
generate_tuple_wrappers(parser)
106-
generate_result_wrappers(parser)
107-
generate_option_wrappers(parser)
108-
generate_trait_placeholders(parser, returned_trait_instances)
113+
generate_binding_methods(parser)
114+
generate_opaque_struct_wrappers(parser, returned_trait_instances)
115+
generate_tuple_wrappers(parser)
116+
generate_result_wrappers(parser)
117+
generate_option_wrappers(parser)
118+
generate_trait_placeholders(parser, returned_trait_instances)
109119

110-
# print('\n\nUtilized cloneable types:\n', '\n '.join(sorted(list(dict.fromkeys(src.conversion_helper.detected_cloneable_types)))), '\n\n')
120+
# print('\n\nUtilized cloneable types:\n', '\n '.join(sorted(list(dict.fromkeys(src.conversion_helper.detected_cloneable_types)))), '\n\n')
111121

112-
undetected_cloneables = src.conversion_helper.cloneable_types - src.conversion_helper.detected_cloneable_types # print('\n\nUnutilized cloneable types:\n', '\n '.join(sorted(list(dict.fromkeys(undetected_cloneables)))), '\n\n')
122+
undetected_cloneables = src.conversion_helper.cloneable_types - src.conversion_helper.detected_cloneable_types # print('\n\nUnutilized cloneable types:\n', '\n '.join(sorted(list(dict.fromkeys(undetected_cloneables)))), '\n\n')

templates/BindingsTemplate.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,10 @@ public class Bindings {
370370
}
371371
}
372372
}
373+
374+
public class func get_ldk_swift_bindings_version() -> String {
375+
return "/* SWIFT_BINDINGS_VERSION */"
376+
}
373377

374378
}
375379

0 commit comments

Comments
 (0)