internal/app: remove app interface
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Test / Create distribution (push) Successful in 36s
				
			
		
			
				
	
				Test / Sandbox (push) Successful in 2m6s
				
			
		
			
				
	
				Test / Hakurei (push) Successful in 3m21s
				
			
		
			
				
	
				Test / Hpkg (push) Successful in 3m47s
				
			
		
			
				
	
				Test / Sandbox (race detector) (push) Successful in 4m22s
				
			
		
			
				
	
				Test / Hakurei (race detector) (push) Successful in 5m16s
				
			
		
			
				
	
				Test / Flake checks (push) Successful in 1m36s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Test / Create distribution (push) Successful in 36s
				
			Test / Sandbox (push) Successful in 2m6s
				
			Test / Hakurei (push) Successful in 3m21s
				
			Test / Hpkg (push) Successful in 3m47s
				
			Test / Sandbox (race detector) (push) Successful in 4m22s
				
			Test / Hakurei (race detector) (push) Successful in 5m16s
				
			Test / Flake checks (push) Successful in 1m36s
				
			It is very clear at this point that there will not be multiple implementations of App, and the internal/app package will never move out of internal due to hsu. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
		
							parent
							
								
									da0459aca1
								
							
						
					
					
						commit
						d0b6852cd7
					
				| @ -4,22 +4,8 @@ package app | ||||
| import ( | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"hakurei.app/hst" | ||||
| 	"hakurei.app/internal/app/state" | ||||
| ) | ||||
| 
 | ||||
| type App interface { | ||||
| 	// ID returns a copy of [state.ID] held by App. | ||||
| 	ID() state.ID | ||||
| 
 | ||||
| 	// Seal determines the outcome of config as a [SealedApp]. | ||||
| 	// The value of config might be overwritten and must not be used again. | ||||
| 	Seal(config *hst.Config) (SealedApp, error) | ||||
| 
 | ||||
| 	String() string | ||||
| } | ||||
| 
 | ||||
| type SealedApp interface { | ||||
| 	// Run commits sealed system setup and starts the app process. | ||||
| 	Run(rs *RunState) error | ||||
|  | ||||
| @ -11,8 +11,8 @@ import ( | ||||
| 	"hakurei.app/internal/sys" | ||||
| ) | ||||
| 
 | ||||
| func New(ctx context.Context, os sys.State) (App, error) { | ||||
| 	a := new(app) | ||||
| func New(ctx context.Context, os sys.State) (*App, error) { | ||||
| 	a := new(App) | ||||
| 	a.sys = os | ||||
| 	a.ctx = ctx | ||||
| 
 | ||||
| @ -23,7 +23,7 @@ func New(ctx context.Context, os sys.State) (App, error) { | ||||
| 	return a, err | ||||
| } | ||||
| 
 | ||||
| func MustNew(ctx context.Context, os sys.State) App { | ||||
| func MustNew(ctx context.Context, os sys.State) *App { | ||||
| 	a, err := New(ctx, os) | ||||
| 	if err != nil { | ||||
| 		log.Fatalf("cannot create app: %v", err) | ||||
| @ -31,7 +31,7 @@ func MustNew(ctx context.Context, os sys.State) App { | ||||
| 	return a | ||||
| } | ||||
| 
 | ||||
| type app struct { | ||||
| type App struct { | ||||
| 	id  *stringPair[state.ID] | ||||
| 	sys sys.State | ||||
| 	ctx context.Context | ||||
| @ -40,9 +40,10 @@ type app struct { | ||||
| 	mu sync.RWMutex | ||||
| } | ||||
| 
 | ||||
| func (a *app) ID() state.ID { a.mu.RLock(); defer a.mu.RUnlock(); return a.id.unwrap() } | ||||
| // ID returns a copy of [state.ID] held by App. | ||||
| func (a *App) ID() state.ID { a.mu.RLock(); defer a.mu.RUnlock(); return a.id.unwrap() } | ||||
| 
 | ||||
| func (a *app) String() string { | ||||
| func (a *App) String() string { | ||||
| 	if a == nil { | ||||
| 		return "(invalid app)" | ||||
| 	} | ||||
| @ -60,7 +61,9 @@ func (a *app) String() string { | ||||
| 	return fmt.Sprintf("(unsealed app %s)", a.id) | ||||
| } | ||||
| 
 | ||||
| func (a *app) Seal(config *hst.Config) (SealedApp, error) { | ||||
| // Seal determines the outcome of [hst.Config] as a [SealedApp]. | ||||
| // Values stored in and referred to by [hst.Config] might be overwritten and must not be used again. | ||||
| func (a *App) Seal(config *hst.Config) (SealedApp, error) { | ||||
| 	a.mu.Lock() | ||||
| 	defer a.mu.Unlock() | ||||
| 
 | ||||
|  | ||||
| @ -7,17 +7,16 @@ import ( | ||||
| 	"hakurei.app/system" | ||||
| ) | ||||
| 
 | ||||
| func NewWithID(id state.ID, os sys.State) App { | ||||
| 	a := new(app) | ||||
| func NewWithID(id state.ID, os sys.State) *App { | ||||
| 	a := new(App) | ||||
| 	a.id = newID(&id) | ||||
| 	a.sys = os | ||||
| 	return a | ||||
| } | ||||
| 
 | ||||
| func AppIParams(a App, sa SealedApp) (*system.I, *container.Params) { | ||||
| 	v := a.(*app) | ||||
| func AppIParams(a *App, sa SealedApp) (*system.I, *container.Params) { | ||||
| 	seal := sa.(*outcome) | ||||
| 	if v.outcome != seal || v.id != seal.id { | ||||
| 	if a.outcome != seal || a.id != seal.id { | ||||
| 		panic("broken app/outcome link") | ||||
| 	} | ||||
| 	return seal.sys, seal.container | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user