package org.eclipse.fx.travisci.client.impl.entities;

import org.eclipse.fx.travisci.client.entities.Commit;

public class CommitImpl implements Commit {
	private long id;
	private String sha;
	private String branch;
	private String message;
	private String committed_at;
	private String author_name;
	private String author_email;
	private String committer_name;
	private String committer_email;
	private String compare_url;
	private String pull_request_number;
	
	@Override
	public long id() {
		return id;
	}
	@Override
	public String sha() {
		return sha;
	}
	@Override
	public String branch() {
		return branch;
	}
	@Override
	public String message() {
		return message;
	}
	@Override
	public String committed_at() {
		return committed_at;
	}
	@Override
	public String author_name() {
		return author_name;
	}
	@Override
	public String author_email() {
		return author_email;
	}
	@Override
	public String committer_name() {
		return committer_name;
	}
	@Override
	public String committer_email() {
		return committer_email;
	}
	@Override
	public String compare_url() {
		return compare_url;
	}
	@Override
	public String pull_request_number() {
		return pull_request_number;
	}
	@Override
	public String toString() {
		return "CommitImpl [id=" + id + ", sha=" + sha + ", branch=" + branch + ", message=" + message
				+ ", committed_at=" + committed_at + ", author_name=" + author_name + ", author_email=" + author_email
				+ ", committer_name=" + committer_name + ", committer_email=" + committer_email + ", compare_url="
				+ compare_url + ", pull_request_number=" + pull_request_number + "]";
	}
	
}
