Writing NEAR smart contracts in Rust, my compiler seems to require objects sent through the API to have the Serialize trait, and objects stored in the blockchain to have BorshSerialize and BorshDeserialize. Is that really the case, or am I doing something wrong? I would have thought that BorshSerialize would provide Serialize, and that you could use one library for both purposes.