i almost want a flag `allow_partial`, but it somehow still indicated as an exceptional condition. Perhaps we should make an error type `IncompleteReadError(msg, data)`?