func parseInstanceList()

in internal/commands/interceptor/instance.go [101:150]


func parseInstanceList(required bool, idListFlagName, nameListFlagName, serviceIDFlagName string) func(*cli.Context) error {
	return func(ctx *cli.Context) error {
		idsArg := ctx.String(idListFlagName)
		namesArgs := ctx.String(nameListFlagName)
		serviceID := ctx.String(serviceIDFlagName)

		if idsArg == "" && namesArgs == "" {
			if required {
				return fmt.Errorf(`either flags "--%s" or "--%s" must be given`, idListFlagName, nameListFlagName)
			}
			return nil
		}

		ids := strings.Split(idsArg, ",")
		names := strings.Split(namesArgs, ",")
		var sliceSize int
		if l := len(ids); idsArg != "" && l != 0 {
			sliceSize = l
		} else {
			sliceSize = len(names)
		}
		instanceIDSlice := make([]string, sliceSize)
		instanceNameSlice := make([]string, sliceSize)
		for i := 0; i < sliceSize; i++ {
			id := ""
			name := ""
			if len(ids) > i {
				id = ids[i]
			}
			if len(names) > i {
				name = names[i]
			}

			id, name, err := encode(serviceID, nameListFlagName, id, name)
			if err != nil {
				return err
			}

			instanceIDSlice[i] = id
			instanceNameSlice[i] = name
		}

		instanceIDSliceString := strings.Join(instanceIDSlice, ",")
		instanceNameSliceString := strings.Join(instanceNameSlice, ",")
		if err := ctx.Set(idListFlagName, instanceIDSliceString); err != nil {
			return err
		}
		return ctx.Set(nameListFlagName, instanceNameSliceString)
	}
}