 9bdcbe0447
			
		
	
	9bdcbe0447
	
	
	
		
			
			Major integrations and fixes: - Added BACKBEAT SDK integration for P2P operation timing - Implemented beat-aware status tracking for distributed operations - Added Docker secrets support for secure license management - Resolved KACHING license validation via HTTPS/TLS - Updated docker-compose configuration for clean stack deployment - Disabled rollback policies to prevent deployment failures - Added license credential storage (CHORUS-DEV-MULTI-001) Technical improvements: - BACKBEAT P2P operation tracking with phase management - Enhanced configuration system with file-based secrets - Improved error handling for license validation - Clean separation of KACHING and CHORUS deployment stacks 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			83 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package obj
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"reflect"
 | |
| 
 | |
| 	. "github.com/polydawn/refmt/tok"
 | |
| )
 | |
| 
 | |
| // General note: avoid using reflect.Type here.  It doesn't do well with `go-cmp`,
 | |
| //  which in turn makes our tests for error paths a lot jankier.
 | |
| 
 | |
| // ErrInvalidUnmarshalTarget describes an invalid argument passed to Unmarshaller.Bind.
 | |
| // (Unmarshalling must target a non-nil pointer so that it can address the value.)
 | |
| type ErrInvalidUnmarshalTarget struct {
 | |
| 	Type reflect.Type
 | |
| }
 | |
| 
 | |
| func (e ErrInvalidUnmarshalTarget) Error() string {
 | |
| 	if e.Type == nil {
 | |
| 		return "unmarshal error: invalid target (nil)"
 | |
| 	}
 | |
| 	if e.Type.Kind() != reflect.Ptr {
 | |
| 		return "unmarshal error: invalid target (non-pointer " + e.Type.String() + ")"
 | |
| 	}
 | |
| 	return "unmarshal error: invalid target (nil " + e.Type.String() + ")"
 | |
| }
 | |
| 
 | |
| // ErrUnmarshalTypeCantFit is the error returned when unmarshalling cannot
 | |
| // coerce the tokens in the stream into the kind of variables the unmarshal is targetting,
 | |
| // for example if a map open token comes when an int is expected,
 | |
| // or an int token comes when a string is expected.
 | |
| type ErrUnmarshalTypeCantFit struct {
 | |
| 	Token  Token
 | |
| 	Value  reflect.Value
 | |
| 	LenLim int // Set only if Value.Kind == Array and Token is bytes of a mismatch length.
 | |
| }
 | |
| 
 | |
| func (e ErrUnmarshalTypeCantFit) Error() string {
 | |
| 	switch e.LenLim {
 | |
| 	case 0:
 | |
| 		return fmt.Sprintf("unmarshal error: cannot assign %s to %s field", e.Token, e.Value.Kind())
 | |
| 	default:
 | |
| 		return fmt.Sprintf("unmarshal error: cannot assign %s to fixed length=%d byte array", e.Token, e.Value.Len())
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // ErrMalformedTokenStream is the error returned when unmarshalling recieves ae
 | |
| // completely invalid transition, such as when a map value is expected, but the
 | |
| // map suddenly closes, or an array close is recieved with no matching array open.
 | |
| type ErrMalformedTokenStream struct {
 | |
| 	Got      TokenType // Token in the stream that triggered the error.
 | |
| 	Expected string    // Freeform string describing valid token types.  Often a summary like "array close or start of value", or "map close or key".
 | |
| }
 | |
| 
 | |
| func (e ErrMalformedTokenStream) Error() string {
 | |
| 	return fmt.Sprintf("malformed stream: invalid appearance of %s token; expected %s", e.Got, e.Expected)
 | |
| }
 | |
| 
 | |
| // ErrNoSuchField is the error returned when unmarshalling into a struct and
 | |
| // the token stream for the map contains a key which is not defined for the struct.
 | |
| type ErrNoSuchField struct {
 | |
| 	Name string // Field name from the token.
 | |
| 	Type string // Type name of the struct we're operating on.
 | |
| }
 | |
| 
 | |
| func (e ErrNoSuchField) Error() string {
 | |
| 	return fmt.Sprintf("unmarshal error: stream contains key %q, but there's no such field in structs of type %s", e.Name, e.Type)
 | |
| }
 | |
| 
 | |
| // ErrNoSuchUnionMember is the error returned when unmarshalling into a union
 | |
| // interface and the token stream contains a key which does not name any of the
 | |
| // known members of the union.
 | |
| type ErrNoSuchUnionMember struct {
 | |
| 	Name         string       // Key name from the token.
 | |
| 	Type         reflect.Type // The interface type we're trying to fill.
 | |
| 	KnownMembers []string     // Members we expected isntead.
 | |
| }
 | |
| 
 | |
| func (e ErrNoSuchUnionMember) Error() string {
 | |
| 	return fmt.Sprintf("unmarshal error: cannot unmarshal into union %s: %q is not one of the known members (expected one of %s)", e.Type, e.Name, e.KnownMembers)
 | |
| }
 |