module SassC::Script::ValueConversion

def self.from_native(value, options)

def self.from_native(value, options)
  case value
  when ::Sass::Value::Null::NULL
    nil
  when ::Sass::Value::Boolean
    ::SassC::Script::Value::Bool.new(value.to_bool)
  when ::Sass::Value::Color
    if value.instance_eval { defined? @hue }
      ::SassC::Script::Value::Color.new(
        hue: value.hue,
        saturation: value.saturation,
        lightness: value.lightness,
        alpha: value.alpha
      )
    else
      ::SassC::Script::Value::Color.new(
        red: value.red,
        green: value.green,
        blue: value.blue,
        alpha: value.alpha
      )
    end
  when ::Sass::Value::List
    ::SassC::Script::Value::List.new(
      value.to_a.map { |element| from_native(element, options) },
      separator: case value.separator
                 when ','
                   :comma
                 when ' '
                   :space
                 else
                   raise UnsupportedValue, "Sass list separator #{value.separator} unsupported"
                 end,
      bracketed: value.bracketed?
    )
  when ::Sass::Value::Map
    ::SassC::Script::Value::Map.new(
      value.contents.to_a.to_h { |k, v| [from_native(k, options), from_native(v, options)] }
    )
  when ::Sass::Value::Number
    ::SassC::Script::Value::Number.new(
      value.value,
      value.numerator_units,
      value.denominator_units
    )
  when ::Sass::Value::String
    ::SassC::Script::Value::String.new(
      value.text,
      value.quoted? ? :string : :identifier
    )
  else
    raise UnsupportedValue, "Sass argument of type #{value.class.name.split('::').last} unsupported"
  end
end