0x4a52466c696e74 5 bulan lalu
induk
melakukan
6a000496c8
7 mengubah file dengan 46 tambahan dan 79 penghapusan
  1. 5 2
      request.go
  2. 0 60
      response.goo
  3. 0 17
      response_empty.go
  4. 3 0
      serialize.go
  5. 19 0
      server.go
  6. 1 0
      time.go
  7. 18 0
      tools.go

+ 5 - 2
request.go

@@ -7,8 +7,11 @@ import (
 )
 
 type (
-	RequestType         byte
-	RequestFiles        map[string]IReadCloserLen
+	// RequestType - тип запроса
+	RequestType byte
+	// RequestFiles - словарь файлов запроса
+	RequestFiles map[string]IReadCloserLen
+	// TokenGenerateMethod - функция генерации токена авторизации
 	TokenGenerateMethod func(data json.Map, expire int64) (string, error)
 )
 

+ 0 - 60
response.goo

@@ -1,60 +0,0 @@
-package rest
-
-/*
-type IResponse interface {
-	IsError() bool
-	KeySet(key string, val any)
-	FileSet(name string, file IReadCloserLen)
-	Close()
-	Send(writer any) IErrorArgs
-}
-
-func NewResponse() *Response {
-	return &Response{
-		RCode:  200,
-		RData:  make(json.Map),
-		RFiles: make(map[string]IReadCloserLen),
-	}
-}
-
-type Response struct {
-	RCode  int
-	RErr   IErrorArgs
-	RData  json.Map
-	RFiles map[string]IReadCloserLen
-}
-
-func (s *Response) IsError() bool {
-	return s.RCode != 200
-}
-
-func (s *Response) KeySet(key string, val any) {
-	s.RData[key] = val
-}
-
-func (s *Response) FileSet(name string, file IReadCloserLen) {
-	s.RFiles[name] = file
-}
-
-func (s *Response) Close() {
-	for _, file := range s.RFiles {
-		file.Close()
-	}
-}
-
-func (s *Response) Code() int {
-	return s.RCode
-}
-
-func (s *Response) Data() json.Map {
-	return s.RData
-}
-
-func (s *Response) Files() map[string]IReadCloserLen {
-	return s.RFiles
-}
-
-func (s *Response) Err() IErrorArgs {
-	return s.RErr
-}
-*/

+ 0 - 17
response_empty.go

@@ -1,17 +0,0 @@
-package rest
-
-type ResponseEmpty struct{}
-
-func (s *ResponseEmpty) IsError() bool {
-	return false
-}
-
-func (s *ResponseEmpty) KeySet(key string, val any) {}
-
-func (s *ResponseEmpty) FileSet(name string, file IReadCloserLen) {}
-
-func (s *ResponseEmpty) Close() {}
-
-func (s *ResponseEmpty) Send(writer any) IErrorArgs {
-	return nil
-}

+ 3 - 0
serialize.go

@@ -8,7 +8,9 @@ import (
 	"git.ali33.ru/fcg-xvii/go-tools/json"
 )
 
+// IRestConverter реализует пользовательский пасер из значения, полученного из запроса (см. пример из time.go)
 type IRestConverter interface {
+	// RestFrom реализeт конвертацию из данных запроса в объект
 	RestFrom(any) IErrorArgs
 }
 
@@ -176,6 +178,7 @@ func parseMap(from, to reflect.Value, fieldName string) IErrorArgs {
 	return nil
 }
 
+// Serialize преобразует словарь from в объект произвольного типа
 func Serialize(from json.Map, to any) IErrorArgs {
 	elemTo := reflect.ValueOf(to).Elem()
 	return parseType(

+ 19 - 0
server.go

@@ -11,16 +11,26 @@ import (
 	"github.com/dgrijalva/jwt-go"
 )
 
+// IServer реализует интерфейс сервера для рест апи
 type IServer interface {
+	// Addr возвращеат адрес, который сервер слушает
 	Addr() string
+	// Secret возвращает секретный ключ, при помощи которого генерируются токены авторизации пользователей
 	Secret() []byte
+	// HandleFunc устанавливает функцию обработчик, которая будет вызвана по обращению к URL, удовлетворяющему pattern
 	HandleFunc(pattern string, handler func(http.ResponseWriter, *http.Request))
+	// Listen запускает прослушивание сервера. Если не удалось успешно запустить прослушивание через
+	// заданный временной интервал (timeout), будет возвращена ошибка
 	Listen(timeout time.Duration) error
+	// TokenGenerate - функция генерации токена авторизации
 	TokenGenerate(m json.Map, expire int64) (string, error)
+	// Close останавливает прослушивание
 	Close() error
+	// Context возвращает контекст сервера
 	Context() context.Context
 }
 
+// NewServer создает сервер для реализации рест апи
 func NewServer(addr string, secret []byte) IServer {
 	return &Server{
 		secret: secret,
@@ -31,6 +41,7 @@ func NewServer(addr string, secret []byte) IServer {
 	}
 }
 
+// Server реализует сервер для рест апи
 type Server struct {
 	secret []byte
 	server *http.Server
@@ -38,10 +49,12 @@ type Server struct {
 	ctx    context.Context
 }
 
+// Context возвращает контекст сервера
 func (s *Server) Context() context.Context {
 	return s.ctx
 }
 
+// Close останавливает прослушивание
 func (s *Server) Close() error {
 	if !s.opened.Load() {
 		return errors.New("ErrNotOpened")
@@ -49,6 +62,8 @@ func (s *Server) Close() error {
 	return s.server.Close()
 }
 
+// Listen запускает прослушивание сервера. Если не удалось успешно запустить прослушивание через
+// заданный временной интервал (timeout), будет возвращена ошибка
 func (s *Server) Listen(timeout time.Duration) (err error) {
 	if s.opened.Swap(true) {
 		return errors.New("ErrAlreadyOpened")
@@ -65,6 +80,7 @@ func (s *Server) Listen(timeout time.Duration) (err error) {
 	return
 }
 
+// TokenGenerate - функция генерации токена авторизации
 func (s *Server) TokenGenerate(m json.Map, expire int64) (string, error) {
 	token := jwt.New(jwt.SigningMethodHS256)
 
@@ -80,14 +96,17 @@ func (s *Server) TokenGenerate(m json.Map, expire int64) (string, error) {
 	return tokenString, err
 }
 
+// Addr возвращеат адрес, который сервер слушает
 func (s *Server) Addr() string {
 	return s.server.Addr
 }
 
+// Secret возвращает секретный ключ, при помощи которого генерируются токены авторизации пользователей
 func (s *Server) Secret() []byte {
 	return s.secret
 }
 
+// HandleFunc устанавливает функцию обработчик, которая будет вызвана по обращению к URL, удовлетворяющему pattern
 func (s *Server) HandleFunc(pattern string, handler func(http.ResponseWriter, *http.Request)) {
 	s.server.Handler.(*http.ServeMux).HandleFunc(pattern, handler)
 }

+ 1 - 0
time.go

@@ -29,6 +29,7 @@ func (s *Time) RestFrom(source any) (err IErrorArgs) {
 	return
 }
 
+// Time возвращает объект времени типа time.Time
 func (s *Time) Time() time.Time {
 	return time.Time(*s)
 }

+ 18 - 0
tools.go

@@ -27,6 +27,7 @@ func BytesToInt64(bytes []byte) int64 {
 	return num
 }
 
+// ioError возвращает ошибку ввода выввода
 func ioError(field string, err error) IErrorArgs {
 	return NewError(
 		"ErrIO",
@@ -39,6 +40,7 @@ func ioError(field string, err error) IErrorArgs {
 
 // чтение
 
+// ReadBuf считывает срез заданного колличества байт и возвращает его
 func ReadBuf(r io.Reader, size int, field string) ([]byte, IErrorArgs) {
 	buf := make([]byte, size)
 	if _, err := r.Read(buf); err != nil {
@@ -47,6 +49,8 @@ func ReadBuf(r io.Reader, size int, field string) ([]byte, IErrorArgs) {
 	return buf, nil
 }
 
+// ReadBufSize считывает размер байтового среза, затем сам срез и возвращает его.
+// lenSize - количество байтов, которыми описывается размер основного среза (см. ReadInt64)
 func ReadBufSize(r io.Reader, lenSize int, field string) ([]byte, IErrorArgs) {
 	var size int64
 	if err := ReadInt64(r, lenSize, field+"_size", &size); err != nil {
@@ -56,6 +60,9 @@ func ReadBufSize(r io.Reader, lenSize int, field string) ([]byte, IErrorArgs) {
 	return buf, err
 }
 
+// ReadInt64 Считывает срез заданного размера, который конвертируется в число типа int64.
+// size - размер среза (может быть от 1 до 8 байт).
+// Результат записывается в значение указателя result
 func ReadInt64(r io.Reader, size int, field string, result *int64) IErrorArgs {
 	buf := make([]byte, size)
 	if _, err := r.Read(buf); err != nil {
@@ -65,6 +72,7 @@ func ReadInt64(r io.Reader, size int, field string, result *int64) IErrorArgs {
 	return nil
 }
 
+// ReadString считывает строку (длина строки, затем строку), см. ReadBufSize
 func ReadString(r io.Reader, lenSize int, field string, result *string) IErrorArgs {
 	strBuf, err := ReadBufSize(r, lenSize, field)
 	if err != nil {
@@ -74,6 +82,7 @@ func ReadString(r io.Reader, lenSize int, field string, result *string) IErrorAr
 	return nil
 }
 
+// ReadByte считывает 1 байт
 func ReadByte(r io.Reader, field string, result *byte) IErrorArgs {
 	buf, err := ReadBuf(r, 1, field)
 	if err != nil {
@@ -85,6 +94,7 @@ func ReadByte(r io.Reader, field string, result *byte) IErrorArgs {
 
 // запись
 
+// WriteBuf записывает срез байтов
 func WriteBuf(w io.Writer, buf []byte, field string) IErrorArgs {
 	if _, err := w.Write(buf); err != nil {
 		return ioError(field, err)
@@ -92,11 +102,15 @@ func WriteBuf(w io.Writer, buf []byte, field string) IErrorArgs {
 	return nil
 }
 
+// WriteInt64 конвертирует число типа int64 в срез заданного размера и записывает его
 func WriteInt64(w io.Writer, val int64, size int, field string) IErrorArgs {
 	buf := Int64ToBytes(val, size)
 	return WriteBuf(w, buf, field)
 }
 
+// WriteString записывает строку в поток.
+// Сначала записывается размер строки (lenSize - количество байт в срезе размера).
+// Далее строка конвертируется в байтовый срез и записывается в поток
 func WriteString(w io.Writer, val, field string, lenSize int) IErrorArgs {
 	// длина
 	if err := WriteInt64(w, int64(len(val)), lenSize, field+"_size"); err != nil {
@@ -109,10 +123,14 @@ func WriteString(w io.Writer, val, field string, lenSize int) IErrorArgs {
 	return WriteBuf(w, []byte(val), field)
 }
 
+// WriteBuf записывает 1 байт в поток
 func WriteByte(w io.Writer, val byte, field string) IErrorArgs {
 	return WriteBuf(w, []byte{val}, field)
 }
 
+// WriteBufSize записывает срез байтов в поток.
+// Сначала записывается размер среза (lenSize - количество байт в срезе размера).
+// Далее в поток записывается сам срез
 func WriteBufSize(w io.Writer, val []byte, lenSize int, field string) IErrorArgs {
 	// длина
 	if err := WriteInt64(w, int64(len(val)), lenSize, field+"_size"); err != nil {