module Metrics::Backend::Test::Interface

def metric(name, type, description: nil, unit: nil, &block)

def metric(name, type, description: nil, unit: nil, &block)
	unless name.is_a?(String)
		raise ArgumentError, "Invalid name (must be String): #{name.inspect}!"
	end
	
	unless name =~ VALID_METRIC_NAME
		raise ArgumentError, "Invalid name (must match #{VALID_METRIC_NAME}): #{name.inspect}!"
	end
	
	unless type.is_a?(Symbol)
		raise ArgumentError, "Invalid type (must be Symbol): #{type.inspect}!"
	end
	
	# Description is optional but must be string if given:
	if description
		unless description.is_a?(String)
			raise ArgumentError, "Invalid description (must be String): #{description.inspect}!"
		end
	end
	
	# Unit is optional but must be string if given:
	if unit
		unless unit.is_a?(String)
			raise ArgumentError, "Invalid unit (must be String): #{unit.inspect}!"
		end
	end
	
	return Metric.new(name, type, description, unit)
end