CRUD results and tests 

Consider: deleting the conditional here and changing the return line to be `return optional<result::update> (std::move(result.value_or(nullopt)));`