Files
zeekay dcf8290c03 Consolidate the Casvisor fork: adopt visor's working content under the vm name
vm and visor were the same Casvisor-lineage app forked twice. visor is the
complete, correct fork — finished @hanzo/iam migration, cloud-provider
integrations (DigitalOcean, DOKS, Hetzner, Lightsail), volumes, node pools,
billing, autoscaler, whitelabel, multi-tenant context filter — and builds
clean. vm carried a broken, incomplete IAM migration that did not compile at
any iam version. This adopts visor's content under vm's name and module path
(github.com/hanzoai/vm), pinning the live hanzoai/iam v1.28.12 (the pinned
pseudo-version 86e34e93edf3 was force-pushed away upstream). visor is archived.

go build ./... and go test ./... green.
2026-06-28 21:00:36 -07:00

61 lines
1.5 KiB
Go

// Copyright 2024 Hanzo Industries Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package guacamole
import (
"fmt"
"strings"
)
type Instruction struct {
Opcode string
Args []string
cache string
}
func NewInstruction(opcode string, args ...string) *Instruction {
return &Instruction{
Opcode: opcode,
Args: args,
}
}
func (i *Instruction) String() string {
if len(i.cache) > 0 {
return i.cache
}
i.cache = fmt.Sprintf("%d.%s", len(i.Opcode), i.Opcode)
for _, value := range i.Args {
i.cache += fmt.Sprintf(",%d.%s", len(value), value)
}
i.cache += string(Delimiter)
return i.cache
}
func (i *Instruction) Parse(content string) *Instruction {
if strings.LastIndex(content, ";") > 0 {
content = strings.TrimRight(content, ";")
}
messages := strings.Split(content, ",")
args := make([]string, len(messages))
for i := range messages {
lm := strings.Split(messages[i], ".")
args[i] = lm[1]
}
return NewInstruction(args[0], args[1:]...)
}