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

import NitroModules

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

public extension LocaleInfo {
  private typealias bridge = margelo.nitro.one.bridge.swift

  /**
   * Create a new instance of `LocaleInfo`.
   */
  init(languageTag: String, languageCode: String?, languageScriptCode: String?, regionCode: String?, languageRegionCode: String?, currencyCode: String?, currencySymbol: String?, languageCurrencyCode: String?, languageCurrencySymbol: String?, decimalSeparator: String?, digitGroupingSeparator: String?, textDirection: String, measurementSystem: String?, temperatureUnit: String?) {
    self.init(std.string(languageTag), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = languageCode {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = languageScriptCode {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = regionCode {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = languageRegionCode {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = currencyCode {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = currencySymbol {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = languageCurrencyCode {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = languageCurrencySymbol {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = decimalSeparator {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = digitGroupingSeparator {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), std.string(textDirection), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = measurementSystem {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = temperatureUnit {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }())
  }

  @inline(__always)
  var languageTag: String {
    return String(self.__languageTag)
  }
  
  @inline(__always)
  var languageCode: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__languageCode) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__languageCode)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var languageScriptCode: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__languageScriptCode) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__languageScriptCode)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var regionCode: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__regionCode) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__regionCode)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var languageRegionCode: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__languageRegionCode) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__languageRegionCode)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var currencyCode: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__currencyCode) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__currencyCode)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var currencySymbol: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__currencySymbol) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__currencySymbol)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var languageCurrencyCode: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__languageCurrencyCode) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__languageCurrencyCode)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var languageCurrencySymbol: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__languageCurrencySymbol) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__languageCurrencySymbol)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var decimalSeparator: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__decimalSeparator) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__decimalSeparator)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var digitGroupingSeparator: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__digitGroupingSeparator) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__digitGroupingSeparator)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var textDirection: String {
    return String(self.__textDirection)
  }
  
  @inline(__always)
  var measurementSystem: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__measurementSystem) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__measurementSystem)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
  
  @inline(__always)
  var temperatureUnit: String? {
    return { () -> String? in
      if bridge.has_value_std__optional_std__string_(self.__temperatureUnit) {
        let __unwrapped = bridge.get_std__optional_std__string_(self.__temperatureUnit)
        return String(__unwrapped)
      } else {
        return nil
      }
    }()
  }
}
