package com.cyksj.dto;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author chan
 * @date 2021-03-22 8:48 下午
 */
@Data
@NoArgsConstructor
public class Result<T> {
	/**
	 * 错误码
	 */
	private Integer code;

	/**
	 * 信息, 一般为状态的描述
	 */
	private String msg;

	/**
	 * 调用成功失败
	 */
	private boolean flag;

	/**
	 * 传递的数据
	 */
	@JsonInclude(JsonInclude.Include.NON_NULL)
	private T data;

	/**
	 * 构造函数
	 *  @param code
	 * @param msg
	 * @param data
	 */
	public Result(@JsonProperty("code") Integer code,
                  @JsonProperty("msg") String msg,
                  @JsonProperty("flag") boolean flag,
                  @JsonProperty("data") T data) {
		this.code = code;
		this.msg = msg;
		this.flag = flag;
		this.data = data;
	}

	/**
	 * 静态工厂构造方法
	 *
	 * @param code 状态码
	 * @param msg 错误信息
	 * @param data DTO
	 * @param <T>DTO类型
	 * @return
	 */
	public static <T> Result<T> of(Integer code, String msg,boolean flag ,T data) {
		return new Result<>(code, msg,flag,data);
	}


}
