anchor.diff:  get_file_info(RequestedInfo, #cdmi_req{
       client = ?USER(_UserId, SessionId),
       file_path = Path,
  -    file_attrs = #file_attr{guid = Guid} = Attrs
  +    file_attrs = #file_attr{guid = Guid, size = FileSize} = Attrs
   }) ->
       lists:foldl(
           fun
  
positive.code:                         )};
                      _ ->
                          Acc#{<<"valuerange">> => iolist_to_binary(
                              [<<"0-">>, integer_to_binary(Attrs#file_attr.size - 1)]
                          )} %todo fix 0--1 when file is empty
                  end;
              (_, Acc) ->
  
negative.code:     options = Options
  } = CdmiReq) ->
      NonEmptyOpts = utils:ensure_defined(Options, [], ?DEFAULT_GET_FILE_OPTS),
      FileInfo = get_file_info(NonEmptyOpts, CdmiReq),
  
      case maps:take(<<"value">>, FileInfo) of
          {{range, Range}, FileInfo2} ->
              Encoding = cdmi_metadata:get_encoding(SessionId, {guid, FileGuid}),
              DataPrefix = case map_size(FileInfo2) of
                  0 ->
                      <<"{\"value\":\"">>;
                  _ ->
                      EncodedFileInfo1 = json_utils:encode(FileInfo2),
                      % Closing '}' must be removed to append streaming content
                      EncodedFileInfo2 = erlang:binary_part(
                          EncodedFileInfo1,
                          0,
                          byte_size(EncodedFileInfo1) - 1
                      ),
                      <<EncodedFileInfo2/binary, ",\"value\":\"">>
              end,
              DataSuffix = <<"\"}">>,
  
              Req2 = cdmi_streamer:stream_cdmi(
                  Req, CdmiReq, Range, Encoding,
                  DataPrefix, DataSuffix
              ),
              {stop, Req2, CdmiReq};
          error ->
              {json_utils:encode(FileInfo), Req, CdmiReq}
      end.
  
  
  