tauri-plugin-torch 0.1.0

A simple flash/torch control plugin for Tauri applications.
Documentation
import SwiftRs
import Tauri
import UIKit
import WebKit
import AVFoundation

class PingArgs: Decodable {
  let value: String?
}

class ToggleArgs: Decodable {
  let value: Bool?
}

class TorchPlugin: Plugin {
  var isOn = false

  @objc public func toggle(_ invoke: Invoke) throws {
    let turnOn = try invoke.parseArgs(ToggleArgs.self).value ?? false

    guard let device = AVCaptureDevice.default(for: .video),
          device.hasTorch else {
      invoke.resolve(["value": false])
      return
    }

    do {
      try device.lockForConfiguration()
      if turnOn {
        try device.setTorchModeOn(level: 1.0)
        self.isOn = true
      } else {
        device.torchMode = .off
        self.isOn = false
      }
      device.unlockForConfiguration()
      invoke.resolve(["value": turnOn])
    } catch {
      self.isOn = false
      invoke.reject("Failed to access torch: \(error.localizedDescription)")
    }
  }

  @objc public func check(_ invoke: Invoke) throws {
    invoke.resolve(["value": self.isOn])
  }
}

@_cdecl("init_plugin_torch")
func initPlugin() -> Plugin {
  return TorchPlugin()
}