| // Copyright (c) FIRST and other WPILib contributors. |
| // Open Source Software; you can modify and/or share it under the terms of |
| // the WPILib BSD license file in the root directory of this project. |
| |
| #include "wpi/MessagePack.h" |
| |
| using namespace mpack; |
| |
| mpack_error_t mpack::mpack_expect_str(mpack_reader_t* reader, std::string* out, |
| uint32_t maxLen) { |
| uint32_t count = mpack_expect_str_max(reader, maxLen); |
| mpack_error_t err = mpack_reader_error(reader); |
| if (err != mpack_ok) { |
| return err; |
| } |
| const char* bytes = mpack_read_bytes_inplace(reader, count); |
| if (bytes) { |
| out->assign(bytes, count); |
| } else { |
| return mpack_reader_error(reader); |
| } |
| mpack_done_str(reader); |
| return mpack_ok; |
| } |
| |
| mpack_error_t mpack::mpack_read_str(mpack_reader_t* reader, mpack_tag_t* tag, |
| std::string* out, uint32_t maxLen) { |
| uint32_t count = mpack_tag_str_length(tag); |
| mpack_error_t err = mpack_reader_error(reader); |
| if (err != mpack_ok) { |
| return err; |
| } |
| if (count > maxLen) { |
| mpack_reader_flag_error(reader, mpack_error_too_big); |
| return mpack_error_too_big; |
| } |
| const char* bytes = mpack_read_bytes_inplace(reader, count); |
| if (bytes) { |
| out->assign(bytes, count); |
| } else { |
| return mpack_reader_error(reader); |
| } |
| mpack_done_str(reader); |
| return mpack_ok; |
| } |