// Copyright 2025 International Digital Economy Academy
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

///|
/// Definitions for specifying variations and typographic features.
///
/// Ported from `fontations/skrifa/src/setting.rs` (Apache-2.0 OR MIT).
pub struct Setting[T] {
  selector : Tag
  value : T
}

///|
pub fn[T] Setting::Setting(selector : Tag, value : T) -> Setting[T] {
  { selector, value }
}

///|
pub fn[T] Setting::from_tuple(pair : (Tag, T)) -> Setting[T] {
  let (selector, value) = pair
  Setting(selector, value)
}

///|
pub fn[T] Setting::from_str(selector : String, value : T) -> Setting[T] {
  Setting(Tag::from_str_or_default(selector), value)
}

///|
pub fn[T] Setting::from_str_tuple(pair : (String, T)) -> Setting[T] {
  let (selector, value) = pair
  Setting::from_str(selector, value)
}

///|
pub type VariationSetting = Setting[Double]