module SassC::Script::ValueConversion
def self.from_native(native_value, options)
def self.from_native(native_value, options) case value_tag = SassC::Native.value_get_tag(native_value) when :sass_null # no-op when :sass_string value = SassC::Native.string_get_value(native_value) type = SassC::Native.string_get_type(native_value) argument = SassC::Script::Value::String.new(value, type) argument when :sass_boolean value = SassC::Native.boolean_get_value(native_value) argument = SassC::Script::Value::Bool.new(value) argument when :sass_number value = SassC::Native.number_get_value(native_value) unit = SassC::Native.number_get_unit(native_value) argument = SassC::Script::Value::Number.new(value, unit) argument when :sass_color red, green, blue, alpha = SassC::Native.color_get_r(native_value), SassC::Native.color_get_g(native_value), SassC::Native.color_get_b(native_value), SassC::Native.color_get_a(native_value) argument = SassC::Script::Value::Color.new(red:red, green:green, blue:blue, alpha:alpha) argument.options = options argument when :sass_map values = {} length = SassC::Native::map_get_length native_value (0..length-1).each do |index| key = SassC::Native::map_get_key(native_value, index) value = SassC::Native::map_get_value(native_value, index) values[from_native(key, options)] = from_native(value, options) end argument = SassC::Script::Value::Map.new values argument when :sass_list length = SassC::Native::list_get_length(native_value) items = (0...length).map do |index| native_item = SassC::Native::list_get_value(native_value, index) from_native(native_item, options) end SassC::Script::Value::List.new(items, separator: :space) else raise UnsupportedValue.new("Sass argument of type #{value_tag} unsupported") end end
def self.to_native(value)
def self.to_native(value) case value_name = value.class.name.split("::").last when "String" SassC::Script::ValueConversion::String.new(value).to_native when "Color" SassC::Script::ValueConversion::Color.new(value).to_native when "Number" SassC::Script::ValueConversion::Number.new(value).to_native when "Map" SassC::Script::ValueConversion::Map.new(value).to_native when "List" SassC::Script::ValueConversion::List.new(value).to_native when "Bool" SassC::Script::ValueConversion::Bool.new(value).to_native else raise SassC::UnsupportedValue.new("Sass return type #{value_name} unsupported") end end