code: def add(self, logical_id, property, value):
          
  
          if not logical_id or not property:
              raise ValueError("LogicalId and property must be a non-empty string")
  
          if not value or not isinstance(value, string_types):
              raise ValueError("Property value must be a non-empty string")
  
          if logical_id not in self._refs:
              self._refs[logical_id] = {}
  
          if property in self._refs[logical_id]:
              raise ValueError("Cannot add second reference value to {}.{} property".format(logical_id, property))
  
          self._refs[logical_id][property] = value
docs: Add the information that resource with given `logical_id` supports the given `property`, and that a reference
          to `logical_id.property` resolves to given `value.
  
          Example:
  
              "MyApi.Deployment" -> "MyApiDeployment1234567890"
  
          :param logical_id: Logical ID of the resource  (Ex: MyLambdaFunction)
          :param property: Property on the resource that can be referenced (Ex: Alias)
          :param value: Value that this reference resolves to.
          :return: nothing