///
/// Vector.swift
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
/// https://github.com/mrousavy/nitro
/// Copyright © 2025 Marc Rousavy @ Margelo
///

import Foundation
import NitroModules

/**
 * Represents an instance of `Vector`, backed by a C++ struct.
 */
public typealias Vector = margelo.nitro.gradient.Vector

public extension Vector {
  private typealias bridge = margelo.nitro.gradient.bridge.swift

  /**
   * Create a new instance of `Vector`.
   */
  init(x: Variant_String_Double, y: Variant_String_Double) {
    self.init({ () -> bridge.std__variant_std__string__double_ in
      switch x {
        case .first(let __value):
          return bridge.create_std__variant_std__string__double_(std.string(__value))
        case .second(let __value):
          return bridge.create_std__variant_std__string__double_(__value)
      }
    }().variant, { () -> bridge.std__variant_std__string__double_ in
      switch y {
        case .first(let __value):
          return bridge.create_std__variant_std__string__double_(std.string(__value))
        case .second(let __value):
          return bridge.create_std__variant_std__string__double_(__value)
      }
    }().variant)
  }

  var x: Variant_String_Double {
    @inline(__always)
    get {
      return { () -> Variant_String_Double in
        let __variant = bridge.std__variant_std__string__double_(self.__x)
        switch __variant.index() {
          case 0:
            let __actual = __variant.get_0()
            return .first(String(__actual))
          case 1:
            let __actual = __variant.get_1()
            return .second(__actual)
          default:
            fatalError("Variant can never have index \(__variant.index())!")
        }
      }()
    }
    @inline(__always)
    set {
      self.__x = { () -> bridge.std__variant_std__string__double_ in
        switch newValue {
          case .first(let __value):
            return bridge.create_std__variant_std__string__double_(std.string(__value))
          case .second(let __value):
            return bridge.create_std__variant_std__string__double_(__value)
        }
      }().variant
    }
  }
  
  var y: Variant_String_Double {
    @inline(__always)
    get {
      return { () -> Variant_String_Double in
        let __variant = bridge.std__variant_std__string__double_(self.__y)
        switch __variant.index() {
          case 0:
            let __actual = __variant.get_0()
            return .first(String(__actual))
          case 1:
            let __actual = __variant.get_1()
            return .second(__actual)
          default:
            fatalError("Variant can never have index \(__variant.index())!")
        }
      }()
    }
    @inline(__always)
    set {
      self.__y = { () -> bridge.std__variant_std__string__double_ in
        switch newValue {
          case .first(let __value):
            return bridge.create_std__variant_std__string__double_(std.string(__value))
          case .second(let __value):
            return bridge.create_std__variant_std__string__double_(__value)
        }
      }().variant
    }
  }
}
