code: func listDatacenters(c context.Context, names stringset.Set) ([]*crimson.Datacenter, error) {
  	db := database.Get(c)
  	rows, err := db.QueryContext(c, `
  		SELECT name, description, state
  		FROM datacenters
  	`)
  	if err != nil {
  		return nil, errors.Annotate(err, "failed to fetch datacenters").Err()
  	}
  	defer rows.Close()
  
  	var datacenters []*crimson.Datacenter
  	for rows.Next() {
  		dc := &crimson.Datacenter{}
  		if err = rows.Scan(&dc.Name, &dc.Description, &dc.State); err != nil {
  			return nil, errors.Annotate(err, "failed to fetch datacenter").Err()
  		}
  		if matches(dc.Name, names) {
  			datacenters = append(datacenters, dc)
  		}
  	}
  	return datacenters, nil
  }
docs: // listDatacenters returns a slice of datacenters in the database.