code: func listVLANs(c context.Context, ids map[int64]struct{}, aliases stringset.Set) ([]*crimson.VLAN, error) {
  	db := database.Get(c)
  	rows, err := db.QueryContext(c, `
  		SELECT id, alias, state, cidr_block
  		FROM vlans
  	`)
  	if err != nil {
  		return nil, errors.Annotate(err, "failed to fetch VLANs").Err()
  	}
  	defer rows.Close()
  
  	var vlans []*crimson.VLAN
  	for rows.Next() {
  		vlan := &crimson.VLAN{}
  		if err = rows.Scan(&vlan.Id, &vlan.Alias, &vlan.State, &vlan.CidrBlock); err != nil {
  			return nil, errors.Annotate(err, "failed to fetch VLAN").Err()
  		}
  		// VLAN may match either the given IDs or aliases.
  		// If both IDs and aliases are empty, consider all VLANs to match.
  		if _, ok := ids[vlan.Id]; ok || aliases.Has(vlan.Alias) || (len(ids) == 0 && aliases.Len() == 0) {
  			vlans = append(vlans, vlan)
  		}
  	}
  	return vlans, nil
  }
docs: // listVLANs returns a slice of VLANs in the database.
  // VLANs matching either a given ID or a given alias are returned. Specify no IDs or aliases to return all VLANs.