---
name: "TM::Serializable"
section: "3pm"
platform: "linux"
package: "libtm-perl"
version: "1.56-7"
release: "Debian 8 (Jessie)"
platforms: ["linux"]
url: "https://new.carta.tech/TM::Serializable"
---

# TM::Serializable(3pm)

Topic Maps, abstract trait for stream (map) based input/output drivers

## NAME

TM::Serializable - Topic Maps, abstract trait for stream (map) based input/output drivers

## SYNOPSIS

```
  # step 1) you write an input/output driver for a serialized TM format
  package MyFormat;
     # provides methods
     sub deserialize {
         my $self   = shift; # gets current map
         my $stream = shift;
         # .... fill the map with content
     }
     sub serialize {
         my $self = shift; # get the map
         # ....
         return ... #serialized content
     }
  1;
  # step 2) construct a subclass of TM using this driver
  package MapWithMyFormat;
    use TM;
    use base qw(TM);
    use Class::Trait qw(TM::Serializable MyFormat);
    1;
  # step 3) use it in your application
  my $tm = new MapWithMyFormat (url => 'file:map.myformat');
  $tm->sync_in; # uses MyFormat to parse the content from the file
```

## DESCRIPTION

This trait implements synchronizable resources using a serialized format. Examples are formats such as AsTMa 1.0, 2.0, LTM, CTM, XTM. The only thing these drivers have to provide are the methods `"serialize"` and `"deserialize"` which serialize maps to streams and vice-versa.

This trait provides the implementations for `"source_in"` and `"source_out"` triggering `"deserialize"` and `"serialize"`, respectively.

## INTERFACE

### Methods

- **source\_in**

  Uses the URL attached to the map object to trigger `"deserialize"` on the stream content behind the resource. All URLs of LWP are supported. If the URI is `"io:stdio"` then content from STDIN is consumed. This content can be consumed more than once (it is buffered internally), so that you can read several times from `"io:stdin"` getting the same input.

  If the resource URI is `"io:stdout"`, then nothing happens.

  If the resource URI is `"null:"`, then nothing happens.

  \[Since TM 1.53\]: Any additional parameters are passed through to the underlying `"deserialize"` method.

- **source\_out**

  This method triggers `"serialize"` on the object. The contents will be copied to the resource identified by the URI attached to the object. At the moment, only `"file:"` URLs  and `"io:stdout"` is supported.

  If the resource URI is `"io:stdin"`, nothing happens.

  If the resource URI is `"null:"`, nothing happens.

  If the resource URI is `"inline:.."` nothing happens.

  \[Since TM 1.53\]: Any additional parameters are passed through to the underlying `"serialize"` method.

## SEE ALSO

TM, TM::Synchronizable

## AUTHOR INFORMATION

Copyright 20(0\[2-6\]\|10), Robert Barta \<drrho@cpan.org\>, All rights reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.  http://www.perl.com/perl/misc/Artistic.html
