Skip to content

Commit db66ef1

Browse files
committed
Log Rust crash error output to Crashlytics
1 parent d05d5a8 commit db66ef1

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

Gifski/Gifski.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Cocoa
2+
import FirebaseCrashlytics
23

34
final class Gifski {
45
enum Loop {
@@ -49,6 +50,10 @@ final class Gifski {
4950

5051
self.wrapper = wrapper
5152

53+
wrapper.setErrorMessageCallback {
54+
Crashlytics.crashlytics().log($0)
55+
}
56+
5257
wrapper.setProgressCallback { [weak self] in
5358
guard let self else {
5459
return 0

Gifski/GifskiWrapper.swift

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@ final class GifskiWrapper {
88
case rgb
99
}
1010

11+
typealias ErrorMessageCallback = (String) -> Void
1112
typealias ProgressCallback = () -> Int
1213
typealias WriteCallback = (Int, UnsafePointer<UInt8>) -> Int
1314

1415
private let pointer: OpaquePointer
1516
private var unmanagedSelf: Unmanaged<GifskiWrapper>!
1617
private var hasFinished = false
18+
private var errorMessageCallback: ErrorMessageCallback!
1719
private var progressCallback: ProgressCallback!
1820
private var writeCallback: WriteCallback!
1921

@@ -38,6 +40,30 @@ final class GifskiWrapper {
3840
}
3941
}
4042

43+
func setErrorMessageCallback(_ callback: @escaping ErrorMessageCallback) {
44+
guard !hasFinished else {
45+
return
46+
}
47+
48+
errorMessageCallback = callback
49+
50+
gifski_set_error_message_callback(
51+
pointer,
52+
{ message, context in // swiftlint:disable:this opening_brace
53+
guard
54+
let message,
55+
let context
56+
else {
57+
return
58+
}
59+
60+
let this = Unmanaged<GifskiWrapper>.fromOpaque(context).takeUnretainedValue()
61+
this.errorMessageCallback(String(cString: message))
62+
},
63+
unmanagedSelf.toOpaque()
64+
)
65+
}
66+
4167
func setProgressCallback(_ callback: @escaping ProgressCallback) {
4268
guard !hasFinished else {
4369
return

0 commit comments

Comments
 (0)