Skip to content

Instantly share code, notes, and snippets.

@bendk
Created April 11, 2022 20:09
Show Gist options
  • Save bendk/3f76a0a02e469cc6a4658a205e8e9f1f to your computer and use it in GitHub Desktop.
Save bendk/3f76a0a02e469cc6a4658a205e8e9f1f to your computer and use it in GitHub Desktop.
diff '--color=auto' -du v91.0.1/nimbusFFI.h v91.1.0/nimbusFFI.h
--- v91.0.1/nimbusFFI.h 2022-04-11 16:07:18.560552019 -0400
+++ v91.1.0/nimbusFFI.h 2022-04-11 16:07:07.692544443 -0400
@@ -46,87 +46,115 @@
// ⚠️ increment the version suffix in all instances of UNIFFI_SHARED_HEADER_V4 in this file. ⚠️
#endif // def UNIFFI_SHARED_H
-void ffi_nimbus_59ee_NimbusClient_object_free(
+void ffi_nimbus_302d_NimbusClient_object_free(
void*_Nonnull ptr,
RustCallStatus *_Nonnull out_status
);
-void*_Nonnull nimbus_59ee_NimbusClient_new(
+void*_Nonnull nimbus_302d_NimbusClient_new(
RustBuffer app_ctx,RustBuffer dbpath,RustBuffer remote_settings_config,RustBuffer available_randomization_units,
RustCallStatus *_Nonnull out_status
);
-void nimbus_59ee_NimbusClient_initialize(
+void nimbus_302d_NimbusClient_initialize(
void*_Nonnull ptr,
RustCallStatus *_Nonnull out_status
);
-RustBuffer nimbus_59ee_NimbusClient_get_experiment_branch(
+RustBuffer nimbus_302d_NimbusClient_get_experiment_branch(
void*_Nonnull ptr,RustBuffer id,
RustCallStatus *_Nonnull out_status
);
-RustBuffer nimbus_59ee_NimbusClient_get_feature_config_variables(
+RustBuffer nimbus_302d_NimbusClient_get_feature_config_variables(
void*_Nonnull ptr,RustBuffer feature_id,
RustCallStatus *_Nonnull out_status
);
-RustBuffer nimbus_59ee_NimbusClient_get_experiment_branches(
+RustBuffer nimbus_302d_NimbusClient_get_experiment_branches(
void*_Nonnull ptr,RustBuffer experiment_slug,
RustCallStatus *_Nonnull out_status
);
-RustBuffer nimbus_59ee_NimbusClient_get_active_experiments(
+RustBuffer nimbus_302d_NimbusClient_get_active_experiments(
void*_Nonnull ptr,
RustCallStatus *_Nonnull out_status
);
-RustBuffer nimbus_59ee_NimbusClient_get_available_experiments(
+RustBuffer nimbus_302d_NimbusClient_get_available_experiments(
void*_Nonnull ptr,
RustCallStatus *_Nonnull out_status
);
-int8_t nimbus_59ee_NimbusClient_get_global_user_participation(
+int8_t nimbus_302d_NimbusClient_get_global_user_participation(
void*_Nonnull ptr,
RustCallStatus *_Nonnull out_status
);
-RustBuffer nimbus_59ee_NimbusClient_set_global_user_participation(
+RustBuffer nimbus_302d_NimbusClient_set_global_user_participation(
void*_Nonnull ptr,int8_t opt_in,
RustCallStatus *_Nonnull out_status
);
-RustBuffer nimbus_59ee_NimbusClient_update_experiments(
+RustBuffer nimbus_302d_NimbusClient_update_experiments(
void*_Nonnull ptr,
RustCallStatus *_Nonnull out_status
);
-void nimbus_59ee_NimbusClient_fetch_experiments(
+void nimbus_302d_NimbusClient_fetch_experiments(
void*_Nonnull ptr,
RustCallStatus *_Nonnull out_status
);
-RustBuffer nimbus_59ee_NimbusClient_apply_pending_experiments(
+RustBuffer nimbus_302d_NimbusClient_apply_pending_experiments(
void*_Nonnull ptr,
RustCallStatus *_Nonnull out_status
);
-void nimbus_59ee_NimbusClient_set_experiments_locally(
+void nimbus_302d_NimbusClient_set_experiments_locally(
void*_Nonnull ptr,RustBuffer experiments_json,
RustCallStatus *_Nonnull out_status
);
-RustBuffer nimbus_59ee_NimbusClient_opt_in_with_branch(
+RustBuffer nimbus_302d_NimbusClient_opt_in_with_branch(
void*_Nonnull ptr,RustBuffer experiment_slug,RustBuffer branch,
RustCallStatus *_Nonnull out_status
);
-RustBuffer nimbus_59ee_NimbusClient_opt_out(
+RustBuffer nimbus_302d_NimbusClient_opt_out(
void*_Nonnull ptr,RustBuffer experiment_slug,
RustCallStatus *_Nonnull out_status
);
-RustBuffer nimbus_59ee_NimbusClient_reset_telemetry_identifiers(
+RustBuffer nimbus_302d_NimbusClient_reset_telemetry_identifiers(
void*_Nonnull ptr,RustBuffer new_randomization_units,
RustCallStatus *_Nonnull out_status
);
-RustBuffer ffi_nimbus_59ee_rustbuffer_alloc(
+void*_Nonnull nimbus_302d_NimbusClient_create_targeting_helper(
+ void*_Nonnull ptr,RustBuffer additional_context,
+ RustCallStatus *_Nonnull out_status
+ );
+void*_Nonnull nimbus_302d_NimbusClient_create_string_helper(
+ void*_Nonnull ptr,RustBuffer additional_context,
+ RustCallStatus *_Nonnull out_status
+ );
+void ffi_nimbus_302d_NimbusTargetingHelper_object_free(
+ void*_Nonnull ptr,
+ RustCallStatus *_Nonnull out_status
+ );
+int8_t nimbus_302d_NimbusTargetingHelper_eval_jexl(
+ void*_Nonnull ptr,RustBuffer expression,
+ RustCallStatus *_Nonnull out_status
+ );
+void ffi_nimbus_302d_NimbusStringHelper_object_free(
+ void*_Nonnull ptr,
+ RustCallStatus *_Nonnull out_status
+ );
+RustBuffer nimbus_302d_NimbusStringHelper_string_format(
+ void*_Nonnull ptr,RustBuffer template,RustBuffer uuid,
+ RustCallStatus *_Nonnull out_status
+ );
+RustBuffer nimbus_302d_NimbusStringHelper_get_uuid(
+ void*_Nonnull ptr,RustBuffer template,
+ RustCallStatus *_Nonnull out_status
+ );
+RustBuffer ffi_nimbus_302d_rustbuffer_alloc(
int32_t size,
RustCallStatus *_Nonnull out_status
);
-RustBuffer ffi_nimbus_59ee_rustbuffer_from_bytes(
+RustBuffer ffi_nimbus_302d_rustbuffer_from_bytes(
ForeignBytes bytes,
RustCallStatus *_Nonnull out_status
);
-void ffi_nimbus_59ee_rustbuffer_free(
+void ffi_nimbus_302d_rustbuffer_free(
RustBuffer buf,
RustCallStatus *_Nonnull out_status
);
-RustBuffer ffi_nimbus_59ee_rustbuffer_reserve(
+RustBuffer ffi_nimbus_302d_rustbuffer_reserve(
RustBuffer buf,int32_t additional,
RustCallStatus *_Nonnull out_status
);
diff '--color=auto' -du v91.0.1/nimbus.swift v91.1.0/nimbus.swift
--- v91.0.1/nimbus.swift 2022-04-11 16:07:18.560552019 -0400
+++ v91.1.0/nimbus.swift 2022-04-11 16:07:07.692544443 -0400
@@ -19,13 +19,13 @@
}
static func from(_ ptr: UnsafeBufferPointer<UInt8>) -> RustBuffer {
- try! rustCall { ffi_nimbus_59ee_rustbuffer_from_bytes(ForeignBytes(bufferPointer: ptr), $0) }
+ try! rustCall { ffi_nimbus_302d_rustbuffer_from_bytes(ForeignBytes(bufferPointer: ptr), $0) }
}
// Frees the buffer in place.
// The buffer must not be used after this is called.
func deallocate() {
- try! rustCall { ffi_nimbus_59ee_rustbuffer_free(self, $0) }
+ try! rustCall { ffi_nimbus_302d_rustbuffer_free(self, $0) }
}
}
@@ -444,6 +444,8 @@
func optInWithBranch( experimentSlug: String, branch: String ) throws -> [EnrollmentChangeEvent]
func optOut( experimentSlug: String ) throws -> [EnrollmentChangeEvent]
func resetTelemetryIdentifiers( newRandomizationUnits: AvailableRandomizationUnits ) throws -> [EnrollmentChangeEvent]
+ func createTargetingHelper( additionalContext: String? ) throws -> NimbusTargetingHelper
+ func createStringHelper( additionalContext: String? ) throws -> NimbusStringHelper
}
@@ -462,12 +464,12 @@
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_new(appCtx.lower(), dbpath.lower(), FfiConverterOptionRecordRemoteSettingsConfig.lower(remoteSettingsConfig), availableRandomizationUnits.lower() , $0)
+ nimbus_302d_NimbusClient_new(appCtx.lower(), dbpath.lower(), FfiConverterOptionRecordRemoteSettingsConfig.lower(remoteSettingsConfig), availableRandomizationUnits.lower() , $0)
})
}
deinit {
- try! rustCall { ffi_nimbus_59ee_NimbusClient_object_free(pointer, $0) }
+ try! rustCall { ffi_nimbus_302d_NimbusClient_object_free(pointer, $0) }
}
@@ -477,7 +479,7 @@
try
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_initialize(self.pointer, $0
+ nimbus_302d_NimbusClient_initialize(self.pointer, $0
)
}
}
@@ -485,7 +487,7 @@
let _retval = try
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_get_experiment_branch(self.pointer, id.lower() , $0
+ nimbus_302d_NimbusClient_get_experiment_branch(self.pointer, id.lower() , $0
)
}
return try FfiConverterOptionString.lift(_retval)
@@ -494,7 +496,7 @@
let _retval = try
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_get_feature_config_variables(self.pointer, featureId.lower() , $0
+ nimbus_302d_NimbusClient_get_feature_config_variables(self.pointer, featureId.lower() , $0
)
}
return try FfiConverterOptionString.lift(_retval)
@@ -503,7 +505,7 @@
let _retval = try
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_get_experiment_branches(self.pointer, experimentSlug.lower() , $0
+ nimbus_302d_NimbusClient_get_experiment_branches(self.pointer, experimentSlug.lower() , $0
)
}
return try FfiConverterSequenceRecordExperimentBranch.lift(_retval)
@@ -512,7 +514,7 @@
let _retval = try
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_get_active_experiments(self.pointer, $0
+ nimbus_302d_NimbusClient_get_active_experiments(self.pointer, $0
)
}
return try FfiConverterSequenceRecordEnrolledExperiment.lift(_retval)
@@ -521,7 +523,7 @@
let _retval = try
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_get_available_experiments(self.pointer, $0
+ nimbus_302d_NimbusClient_get_available_experiments(self.pointer, $0
)
}
return try FfiConverterSequenceRecordAvailableExperiment.lift(_retval)
@@ -530,7 +532,7 @@
let _retval = try
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_get_global_user_participation(self.pointer, $0
+ nimbus_302d_NimbusClient_get_global_user_participation(self.pointer, $0
)
}
return try Bool.lift(_retval)
@@ -539,7 +541,7 @@
let _retval = try
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_set_global_user_participation(self.pointer, optIn.lower() , $0
+ nimbus_302d_NimbusClient_set_global_user_participation(self.pointer, optIn.lower() , $0
)
}
return try FfiConverterSequenceRecordEnrollmentChangeEvent.lift(_retval)
@@ -548,7 +550,7 @@
let _retval = try
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_update_experiments(self.pointer, $0
+ nimbus_302d_NimbusClient_update_experiments(self.pointer, $0
)
}
return try FfiConverterSequenceRecordEnrollmentChangeEvent.lift(_retval)
@@ -557,7 +559,7 @@
try
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_fetch_experiments(self.pointer, $0
+ nimbus_302d_NimbusClient_fetch_experiments(self.pointer, $0
)
}
}
@@ -565,7 +567,7 @@
let _retval = try
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_apply_pending_experiments(self.pointer, $0
+ nimbus_302d_NimbusClient_apply_pending_experiments(self.pointer, $0
)
}
return try FfiConverterSequenceRecordEnrollmentChangeEvent.lift(_retval)
@@ -574,7 +576,7 @@
try
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_set_experiments_locally(self.pointer, experimentsJson.lower() , $0
+ nimbus_302d_NimbusClient_set_experiments_locally(self.pointer, experimentsJson.lower() , $0
)
}
}
@@ -582,7 +584,7 @@
let _retval = try
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_opt_in_with_branch(self.pointer, experimentSlug.lower(), branch.lower() , $0
+ nimbus_302d_NimbusClient_opt_in_with_branch(self.pointer, experimentSlug.lower(), branch.lower() , $0
)
}
return try FfiConverterSequenceRecordEnrollmentChangeEvent.lift(_retval)
@@ -591,7 +593,7 @@
let _retval = try
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_opt_out(self.pointer, experimentSlug.lower() , $0
+ nimbus_302d_NimbusClient_opt_out(self.pointer, experimentSlug.lower() , $0
)
}
return try FfiConverterSequenceRecordEnrollmentChangeEvent.lift(_retval)
@@ -600,11 +602,29 @@
let _retval = try
rustCallWithError(NimbusError.self) {
- nimbus_59ee_NimbusClient_reset_telemetry_identifiers(self.pointer, newRandomizationUnits.lower() , $0
+ nimbus_302d_NimbusClient_reset_telemetry_identifiers(self.pointer, newRandomizationUnits.lower() , $0
)
}
return try FfiConverterSequenceRecordEnrollmentChangeEvent.lift(_retval)
}
+ public func createTargetingHelper( additionalContext: String? = nil ) throws -> NimbusTargetingHelper {
+ let _retval = try
+ rustCallWithError(NimbusError.self) {
+
+ nimbus_302d_NimbusClient_create_targeting_helper(self.pointer, FfiConverterOptionJsonObject.lower(additionalContext) , $0
+ )
+}
+ return try NimbusTargetingHelper.lift(_retval)
+ }
+ public func createStringHelper( additionalContext: String? = nil ) throws -> NimbusStringHelper {
+ let _retval = try
+ rustCallWithError(NimbusError.self) {
+
+ nimbus_302d_NimbusClient_create_string_helper(self.pointer, FfiConverterOptionJsonObject.lower(additionalContext) , $0
+ )
+}
+ return try NimbusStringHelper.lift(_retval)
+ }
}
@@ -644,6 +664,158 @@
// """
extension NimbusClient : ViaFfi, Serializable {}
+
+public protocol NimbusTargetingHelperProtocol {
+ func evalJexl( expression: String ) throws -> Bool
+
+}
+
+public class NimbusTargetingHelper: NimbusTargetingHelperProtocol {
+ fileprivate let pointer: UnsafeMutableRawPointer
+
+ // TODO: We'd like this to be `private` but for Swifty reasons,
+ // we can't implement `ViaFfi` without making this `required` and we can't
+ // make it `required` without making it `public`.
+ required init(unsafeFromRawPointer pointer: UnsafeMutableRawPointer) {
+ self.pointer = pointer
+ }
+
+ deinit {
+ try! rustCall { ffi_nimbus_302d_NimbusTargetingHelper_object_free(pointer, $0) }
+ }
+
+
+
+
+ public func evalJexl( expression: String ) throws -> Bool {
+ let _retval = try
+ rustCallWithError(NimbusError.self) {
+
+ nimbus_302d_NimbusTargetingHelper_eval_jexl(self.pointer, expression.lower() , $0
+ )
+}
+ return try Bool.lift(_retval)
+ }
+
+}
+
+
+fileprivate extension NimbusTargetingHelper {
+ typealias FfiType = UnsafeMutableRawPointer
+
+ static func read(from buf: Reader) throws -> Self {
+ let v: UInt64 = try buf.readInt()
+ // The Rust code won't compile if a pointer won't fit in a UInt64.
+ // We have to go via `UInt` because that's the thing that's the size of a pointer.
+ let ptr = UnsafeMutableRawPointer(bitPattern: UInt(truncatingIfNeeded: v))
+ if (ptr == nil) {
+ throw UniffiInternalError.unexpectedNullPointer
+ }
+ return try self.lift(ptr!)
+ }
+
+ func write(into buf: Writer) {
+ // This fiddling is because `Int` is the thing that's the same size as a pointer.
+ // The Rust code won't compile if a pointer won't fit in a `UInt64`.
+ buf.writeInt(UInt64(bitPattern: Int64(Int(bitPattern: self.lower()))))
+ }
+
+ static func lift(_ pointer: UnsafeMutableRawPointer) throws -> Self {
+ return Self(unsafeFromRawPointer: pointer)
+ }
+
+ func lower() -> UnsafeMutableRawPointer {
+ return self.pointer
+ }
+}
+
+// Ideally this would be `fileprivate`, but Swift says:
+// """
+// 'private' modifier cannot be used with extensions that declare protocol conformances
+// """
+extension NimbusTargetingHelper : ViaFfi, Serializable {}
+
+
+public protocol NimbusStringHelperProtocol {
+ func stringFormat( template: String, uuid: String? ) -> String
+ func getUuid( template: String ) -> String?
+
+}
+
+public class NimbusStringHelper: NimbusStringHelperProtocol {
+ fileprivate let pointer: UnsafeMutableRawPointer
+
+ // TODO: We'd like this to be `private` but for Swifty reasons,
+ // we can't implement `ViaFfi` without making this `required` and we can't
+ // make it `required` without making it `public`.
+ required init(unsafeFromRawPointer pointer: UnsafeMutableRawPointer) {
+ self.pointer = pointer
+ }
+
+ deinit {
+ try! rustCall { ffi_nimbus_302d_NimbusStringHelper_object_free(pointer, $0) }
+ }
+
+
+
+
+ public func stringFormat( template: String, uuid: String? = nil ) -> String {
+ let _retval = try!
+ rustCall() {
+
+ nimbus_302d_NimbusStringHelper_string_format(self.pointer, template.lower(), FfiConverterOptionString.lower(uuid) , $0
+ )
+}
+ return try! String.lift(_retval)
+ }
+ public func getUuid( template: String ) -> String? {
+ let _retval = try!
+ rustCall() {
+
+ nimbus_302d_NimbusStringHelper_get_uuid(self.pointer, template.lower() , $0
+ )
+}
+ return try! FfiConverterOptionString.lift(_retval)
+ }
+
+}
+
+
+fileprivate extension NimbusStringHelper {
+ typealias FfiType = UnsafeMutableRawPointer
+
+ static func read(from buf: Reader) throws -> Self {
+ let v: UInt64 = try buf.readInt()
+ // The Rust code won't compile if a pointer won't fit in a UInt64.
+ // We have to go via `UInt` because that's the thing that's the size of a pointer.
+ let ptr = UnsafeMutableRawPointer(bitPattern: UInt(truncatingIfNeeded: v))
+ if (ptr == nil) {
+ throw UniffiInternalError.unexpectedNullPointer
+ }
+ return try self.lift(ptr!)
+ }
+
+ func write(into buf: Writer) {
+ // This fiddling is because `Int` is the thing that's the same size as a pointer.
+ // The Rust code won't compile if a pointer won't fit in a `UInt64`.
+ buf.writeInt(UInt64(bitPattern: Int64(Int(bitPattern: self.lower()))))
+ }
+
+ static func lift(_ pointer: UnsafeMutableRawPointer) throws -> Self {
+ return Self(unsafeFromRawPointer: pointer)
+ }
+
+ func lower() -> UnsafeMutableRawPointer {
+ return self.pointer
+ }
+}
+
+// Ideally this would be `fileprivate`, but Swift says:
+// """
+// 'private' modifier cannot be used with extensions that declare protocol conformances
+// """
+extension NimbusStringHelper : ViaFfi, Serializable {}
+
public struct AppContext {
public var appName: String
public var appId: String
@@ -1418,6 +1590,23 @@
extension NimbusError: Equatable, Hashable {}
extension NimbusError: Error { }
+fileprivate struct FfiConverterTypeJsonObject {
+ fileprivate static func read(_ buf: Reader) throws -> String {
+ return try String.read(from: buf)
+ }
+
+ fileprivate static func write(_ value: String, _ buf: Writer) {
+ return value.write(into: buf)
+ }
+
+ fileprivate static func lift(_ value: RustBuffer) throws -> String {
+ return try String.lift(value)
+ }
+
+ fileprivate static func lower(_ value: String) -> RustBuffer {
+ return value.lower()
+ }
+}
extension Int8: Primitive, ViaFfi {
fileprivate static func read(from buf: Reader) throws -> Self {
return try self.lift(buf.readInt())
@@ -1501,6 +1690,8 @@
}
}
// Helper code for NimbusClient class is found in ObjectTemplate.swift
+// Helper code for NimbusStringHelper class is found in ObjectTemplate.swift
+// Helper code for NimbusTargetingHelper class is found in ObjectTemplate.swift
// Helper code for AppContext record is found in RecordTemplate.swift
// Helper code for AvailableExperiment record is found in RecordTemplate.swift
// Helper code for AvailableRandomizationUnits record is found in RecordTemplate.swift
@@ -1575,6 +1766,22 @@
}
}
+fileprivate enum FfiConverterOptionJsonObject: FfiConverterUsingByteBuffer {
+ typealias SwiftType = String?
+
+ static func write(_ value: SwiftType, into buf: Writer) {
+ FfiConverterOptional.write(value, into: buf) { item, buf in
+ FfiConverterTypeJsonObject.write(item, buf)
+ }
+ }
+
+ static func read(from buf: Reader) throws -> SwiftType {
+ try FfiConverterOptional.read(from: buf) { buf in
+ try FfiConverterTypeJsonObject.read(buf)
+ }
+ }
+}
+
fileprivate enum FfiConverterSequenceString: FfiConverterUsingByteBuffer {
typealias SwiftType = [String]
@@ -1672,6 +1879,7 @@
}
}
}
+// Helper code for JsonObject is found in CustomType.py
/**
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment