github.com/hy3/cuto@v0.9.8-0.20160830082821-aa6652f877b7/message/response.go (about)

     1  // Copyright 2015 unirita Inc.
     2  // Created 2015/04/10 honda
     3  
     4  package message
     5  
     6  import (
     7  	"encoding/json"
     8  	"fmt"
     9  )
    10  
    11  // レスポンスメッセージ送信元servantのバージョン
    12  var ServantVersion string
    13  
    14  type Response struct {
    15  	Type       string `json:"type"`
    16  	Version    string `json:"version"`
    17  	NID        int    `json:"nid"`
    18  	JID        string `json:"jid"`
    19  	RC         int    `json:"rc"`
    20  	Stat       int    `json:"stat"`
    21  	Detail     string `json:"detail"`
    22  	Var        string `json:"var"`
    23  	St         string `json:"st"`
    24  	Et         string `json:"et"`
    25  	JoblogFile string `json:"joblogfile"`
    26  }
    27  
    28  const responseMessageType = "response"
    29  
    30  // ジョブ実行結果JSONメッセージをパースし、Responseオブジェクトのメンバをセットする。
    31  //
    32  // param : メッセージ内容の文字列。
    33  func (r *Response) ParseJSON(message string) error {
    34  	byteMessage := []byte(message)
    35  
    36  	err := json.Unmarshal(byteMessage, r)
    37  	if err != nil {
    38  		return err
    39  	}
    40  
    41  	if r.Type != responseMessageType {
    42  		return fmt.Errorf("Invalid message type.")
    43  	}
    44  
    45  	return nil
    46  }
    47  
    48  // Responseオブジェクトの値を元に、ジョブ実行結果JSONメッセージを生成する
    49  //
    50  // return : JSONフォーマット整形後の文字列。
    51  func (r Response) GenerateJSON() (string, error) {
    52  	r.Type = responseMessageType
    53  	r.Version = ServantVersion
    54  	byteMessage, err := json.Marshal(r)
    55  	if err != nil {
    56  		return ``, err
    57  	}
    58  
    59  	return string(byteMessage), nil
    60  }