code: func (c *ResourceConfig) Equal(c2 *ResourceConfig) bool {
  	// If either are nil, then they're only equal if they're both nil
  	if c == nil || c2 == nil {
  		return c == c2
  	}
  
  	// Sort the computed keys so they're deterministic
  	sort.Strings(c.ComputedKeys)
  	sort.Strings(c2.ComputedKeys)
  
  	// Two resource configs if their exported properties are equal.
  	// We don't compare "raw" because it is never used again after
  	// initialization and for all intents and purposes they are equal
  	// if the exported properties are equal.
  	check := [][2]interface{}{
  		{c.ComputedKeys, c2.ComputedKeys},
  		{c.Raw, c2.Raw},
  		{c.Config, c2.Config},
  	}
  	for _, pair := range check {
  		if !reflect.DeepEqual(pair[0], pair[1]) {
  			return false
  		}
  	}
  
  	return true
  }
docs: // Equal checks the equality of two resource configs.