<?php
namespace nur\sery\file;

use nur\sery\os\IOException;

/**
 * Interface IWriter: un objet dans lequel on peut écrire des données
 */
interface IWriter extends _IFile {
  /** @throws IOException */
  function fwrite(string $data, int $length=0): int;

  /** @throws IOException */
  function fflush(): self;

  /** @throws IOException */
  function ftruncate(int $size): self;

  /** afficher les lignes */
  function writeLines(?iterable $lines): self;

  /**
   * essayer de verrouiller le fichier en écriture. retourner true si l'opération
   * réussit. dans ce cas, il faut appeler {@link getWriter()} avec l'argument
   * true
   */
  function canWrite(): bool;

  /**
   * verrouiller en mode exclusif puis retourner un objet permettant d'écrire
   * dans le fichier
   */
  function getWriter(bool $alreadyLocked=false): IWriter;

  /** écrire le contenu spécifié dans le fichier */
  function putContents(string $contents, bool $close=true, bool $alreadyLocked=false): void;

  /** sérialiser l'objet dans la destination */
  function serialize($object, bool $close=true, bool $alreadyLocked=false): void;
}
