#pragma once

#include <Eigen/Dense>
#include "eigen_matrix.pb.h"  // generated by protoc

namespace EigenProto {

// Serialize Eigen::MatrixXd to protobuf
bool serialize(const Eigen::MatrixXd& mat, eigen::MatrixXd* proto_mat);

// Deserialize Eigen::MatrixXd from protobuf
bool deserialize(const eigen::MatrixXd& proto_mat, Eigen::MatrixXd* mat);


void Matrix4dToProto(const Eigen::Matrix4d& mat, eigen::Matrix4d* proto_mat);

void ProtoToMatrix4d(const eigen::Matrix4d& proto_mat, Eigen::Matrix4d* mat);


// Convenience: Save to file
bool saveToFile(const Eigen::MatrixXd& mat, const std::string& filename);

// Convenience: Load from file
bool loadFromFile(Eigen::MatrixXd* mat, const std::string& filename);

} // namespace EigenProto