| // 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 | |
| } |