package transport

type NoopTransport struct {
	opts Options
}

func (t *NoopTransport) Init(opts ...Option) error {
	for _, o := range opts {
		o(&t.opts)
	}
	return nil
}

func (t *NoopTransport) Options() Options {
	return t.opts
}

func (t *NoopTransport) Dial(addr string, opts ...DialOption) (Client, error) {
	options := NewDialOptions(opts...)
	return &noopClient{opts: options}, nil
}

func (t *NoopTransport) Listen(addr string, opts ...ListenOption) (Listener, error) {
	options := NewListenOptions(opts...)
	return &noopListener{opts: options}, nil
}

func (t *NoopTransport) String() string {
	return "noop"
}

type noopClient struct {
	opts DialOptions
}

func (c *noopClient) Close() error {
	return nil
}

func (c *noopClient) Local() string {
	return ""
}

func (c *noopClient) Remote() string {
	return ""
}

func (c *noopClient) Recv(*Message) error {
	return nil
}

func (c *noopClient) Send(*Message) error {
	return nil
}

type noopListener struct {
	opts ListenOptions
}

func (l *noopListener) Addr() string {
	return ""
}

func (l *noopListener) Accept(fn func(Socket)) error {
	return nil
}

func (l *noopListener) Close() error {
	return nil
}