code: func DataSourceResourceShim(name string, dataSource *Resource) *Resource {
  	// Recursively, in-place adjust the schema so that it has ForceNew
  	// on any user-settable resource.
  	dataSourceResourceShimAdjustSchema(dataSource.Schema)
  
  	dataSource.Create = CreateFunc(dataSource.Read)
  	dataSource.Delete = func(d *ResourceData, meta interface{}) error {
  		d.SetId("")
  		return nil
  	}
  	dataSource.Update = nil // should already be nil, but let's make sure
  
  	// FIXME: Link to some further docs either on the website or in the
  	// changelog, once such a thing exists.
  	dataSource.DeprecationMessage = fmt.Sprintf(
  		"using %s as a resource is deprecated; consider using the data source instead",
  		name,
  	)
  
  	return dataSource
  }
docs: // DataSourceResourceShim takes a Resource instance describing a data source
  // (with a Read implementation and a Schema, at least) and returns a new
  // Resource instance with additional Create and Delete implementations that
  // allow the data source to be used as a resource.
  //
  // This is a backward-compatibility layer for data sources that were formerly
  // read-only resources before the data source concept was added. It should not
  // be used for any *new* data sources.
  //
  // The Read function for the data source *must* call d.SetId with a non-empty
  // id in order for this shim to function as expected.
  //
  // The provided Resource instance, and its schema, will be modified in-place
  // to make it suitable for use as a full resource.