github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/cmd/serve/restic/stdio_conn.go (about)

     1  package restic
     2  
     3  import (
     4  	"net"
     5  	"os"
     6  	"time"
     7  )
     8  
     9  // Addr implements net.Addr for stdin/stdout.
    10  type Addr struct{}
    11  
    12  // Network returns the network type as a string.
    13  func (a Addr) Network() string {
    14  	return "stdio"
    15  }
    16  
    17  func (a Addr) String() string {
    18  	return "stdio"
    19  }
    20  
    21  // StdioConn implements a net.Conn via stdin/stdout.
    22  type StdioConn struct {
    23  	stdin  *os.File
    24  	stdout *os.File
    25  }
    26  
    27  func (s *StdioConn) Read(p []byte) (int, error) {
    28  	return s.stdin.Read(p)
    29  }
    30  
    31  func (s *StdioConn) Write(p []byte) (int, error) {
    32  	return s.stdout.Write(p)
    33  }
    34  
    35  // Close closes both streams.
    36  func (s *StdioConn) Close() error {
    37  	err1 := s.stdin.Close()
    38  	err2 := s.stdout.Close()
    39  	if err1 != nil {
    40  		return err1
    41  	}
    42  	return err2
    43  }
    44  
    45  // LocalAddr returns nil.
    46  func (s *StdioConn) LocalAddr() net.Addr {
    47  	return Addr{}
    48  }
    49  
    50  // RemoteAddr returns nil.
    51  func (s *StdioConn) RemoteAddr() net.Addr {
    52  	return Addr{}
    53  }
    54  
    55  // SetDeadline sets the read/write deadline.
    56  func (s *StdioConn) SetDeadline(t time.Time) error {
    57  	err1 := s.stdin.SetReadDeadline(t)
    58  	err2 := s.stdout.SetWriteDeadline(t)
    59  	if err1 != nil {
    60  		return err1
    61  	}
    62  	return err2
    63  }
    64  
    65  // SetReadDeadline sets the read/write deadline.
    66  func (s *StdioConn) SetReadDeadline(t time.Time) error {
    67  	return s.stdin.SetReadDeadline(t)
    68  }
    69  
    70  // SetWriteDeadline sets the read/write deadline.
    71  func (s *StdioConn) SetWriteDeadline(t time.Time) error {
    72  	return s.stdout.SetWriteDeadline(t)
    73  }