Initial commit: Go 1.23 release state
This commit is contained in:
86
test/typeparam/issue50561.dir/diameter.go
Normal file
86
test/typeparam/issue50561.dir/diameter.go
Normal file
@@ -0,0 +1,86 @@
|
||||
// Copyright 2022 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package diameter
|
||||
|
||||
type Runnable interface {
|
||||
Run()
|
||||
}
|
||||
|
||||
// RunnableFunc is converter which converts function to Runnable interface
|
||||
type RunnableFunc func()
|
||||
|
||||
// Run is Runnable.Run
|
||||
func (r RunnableFunc) Run() {
|
||||
r()
|
||||
}
|
||||
|
||||
type Executor interface {
|
||||
ExecuteUnsafe(runnable Runnable)
|
||||
}
|
||||
|
||||
type Promise[T any] interface {
|
||||
Future() Future[T]
|
||||
Success(value T) bool
|
||||
Failure(err error) bool
|
||||
IsCompleted() bool
|
||||
Complete(result Try[T]) bool
|
||||
}
|
||||
|
||||
type Future[T any] interface {
|
||||
OnFailure(cb func(err error), ctx ...Executor)
|
||||
OnSuccess(cb func(success T), ctx ...Executor)
|
||||
Foreach(f func(v T), ctx ...Executor)
|
||||
OnComplete(cb func(try Try[T]), ctx ...Executor)
|
||||
IsCompleted() bool
|
||||
// Value() Option[Try[T]]
|
||||
Failed() Future[error]
|
||||
Recover(f func(err error) T, ctx ...Executor) Future[T]
|
||||
RecoverWith(f func(err error) Future[T], ctx ...Executor) Future[T]
|
||||
}
|
||||
|
||||
type Try[T any] struct {
|
||||
v *T
|
||||
err error
|
||||
}
|
||||
|
||||
func (r Try[T]) IsSuccess() bool {
|
||||
return r.v != nil
|
||||
}
|
||||
|
||||
type ByteBuffer struct {
|
||||
pos int
|
||||
buf []byte
|
||||
underflow error
|
||||
}
|
||||
|
||||
// InboundHandler is extends of uclient.NetInboundHandler
|
||||
type InboundHandler interface {
|
||||
OriginHost() string
|
||||
OriginRealm() string
|
||||
}
|
||||
|
||||
type transactionID struct {
|
||||
hopID uint32
|
||||
endID uint32
|
||||
}
|
||||
|
||||
type roundTripper struct {
|
||||
promise map[transactionID]Promise[*ByteBuffer]
|
||||
host string
|
||||
realm string
|
||||
}
|
||||
|
||||
func (r *roundTripper) OriginHost() string {
|
||||
return r.host
|
||||
}
|
||||
func (r *roundTripper) OriginRealm() string {
|
||||
return r.realm
|
||||
}
|
||||
|
||||
func NewInboundHandler(host string, realm string, productName string) InboundHandler {
|
||||
ret := &roundTripper{promise: make(map[transactionID]Promise[*ByteBuffer]), host: host, realm: realm}
|
||||
|
||||
return ret
|
||||
}
|
||||
13
test/typeparam/issue50561.dir/main.go
Normal file
13
test/typeparam/issue50561.dir/main.go
Normal file
@@ -0,0 +1,13 @@
|
||||
// Copyright 2022 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"./diameter"
|
||||
)
|
||||
|
||||
func main() {
|
||||
diameter.NewInboundHandler("hello", "world", "hi")
|
||||
}
|
||||
Reference in New Issue
Block a user